SWI-Prolog:如何编写命令行输出的解决方案?

时间:2017-09-16 13:56:03

标签: command-line-interface swi-prolog clpr

我正在使用带有clpr库的SWI-Prolog来解决对实数的约束。我通过从command line调用SWI-Prolog并通过另一个程序解析输出来完成此操作。

例如,要解决{F = 1.8 * C + 32}, {C = 25}.之类的问题,我会生成以下命令:

swipl \
  -g "use_module(library(clpr))" \
  -g "{F = 1.8 * C + 32}, {C = 25}, write(\"F -> \"), write(F), write(\"\\n\")" \
  -g halt

SWI-Prolog的输出是:

F -> 77.0

如果结果是普通数字,则效果很好,但如果结果再次成为约束(或者通常是更复杂的解决方案),则效果不佳。例如,对于{X > 3}, {Y < 5}, {X + Y = 10}.,我在SWI-Prolog环境中获得了解决方案{Y < 5.0, X = 10.0 - Y},但我没有找到将其写入命令行输出的方法。有没有办法做到这一点?

1 个答案:

答案 0 :(得分:2)

您可以使用dump / 3谓词,例如:

{X > 3}, {Y < 5}, {X + Y = 10}, dump([X,Y], [x,y], L), write(L).

产生

 [y=10.0-x,x>5.0]