SWI-Prolog:如何编写命令行输出的解决方案?
SWI-Prolog: How to write a solution to the command line output?
我正在使用带有 clpr library for solving constraints over real numbers. I do this by calling SWI-Prolog from the 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}
,但我没有找到将其写入命令行输出的方法。有办法吗?
可以使用dump/3谓词,例如:
{X > 3}, {Y < 5}, {X + Y = 10}, dump([X,Y], [x,y], L), write(L).
产生:
[y=10.0-x,x>5.0]
我正在使用带有 clpr library for solving constraints over real numbers. I do this by calling SWI-Prolog from the 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}
,但我没有找到将其写入命令行输出的方法。有办法吗?
可以使用dump/3谓词,例如:
{X > 3}, {Y < 5}, {X + Y = 10}, dump([X,Y], [x,y], L), write(L).
产生:
[y=10.0-x,x>5.0]