2017-09-16 360 views
1

我正在使用SWI-Prolog和clpr庫來解決實數約束問題。我通過從command line調用SWI-Prolog並通過另一個程序解析輸出來完成此操作。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},但我沒有找到將其寫入命令行輸出的方法。有沒有辦法做到這一點?

+0

當然你不想使用[標籤:clpq在代替? clpr到處都是數字問題... – false

回答

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] 
+0

謝謝!這正是我所期待的。 – Michael

相關問題