1
我試圖用prologs約束求解器來解決特定的問題,我堅持:d 的我的問題,需要一個更普遍的版本是這樣的:如何運行在序言暫停目標與約束
:- lib(ic).:- lib(ic).
solve([A1*X+B1*Y=C1, A2*X+B2*Y=C2]):-
X::[0..999],
Y::[0..999],
X #\= 0,
Y #\= 0,
A1*X+B1*Y#=C1, % line1
A2*X+B2*Y#=C2. % line2
而這是查詢/目標我使用:
solve([2*X+3*Y=5, 3*X+2*Y=5]).
,程序會計算X和Y的值(在這種情況下,X = 1,Y = 1在溶液中)。 我在想什麼,如果在目標/查詢參數的數量可能會有所不同..在這種情況下,我的序言程序需要有一個動態暫停的目標,以取代行%line1和%line2註釋。
問題是,我如何讓這些表達式延遲..?我不想在問題中硬編碼,並認爲只有兩個表達式將通過目標傳遞。
希望問題是清楚的。 謝謝。
感謝您的片段。我不明白這部分代碼: Eq0 =(Lhs#= Rhs) 這是如何工作的?請指導我在線提供合適的材料,以便我可以閱讀關於此類編碼的更多信息。謝謝。 – kallakafar 2012-02-11 16:32:41
@kallakafar:如果你知道變量的值不能爲0,你可以相應地設置域'Vars :: [1..999]'並放棄'foreach'循環。 'Eq0 =(Lhs#= Rhs)'這一行意味着變量'Eq0'與目標'(Lhs#= Rhs)'綁定,但目標沒有執行。它只在下一行調用(Eq0)'中執行。只編寫'Lhs#= Rhs'的問題是,對於ic庫,只允許變量,而不是複雜的術語。在你的情況下,'Lhs'將是一個術語,所以你需要將它包裝在'eval/1'中:'eval(Lhs)#= Rhs'。 – twinterer 2012-02-13 08:01:18
@kallakafar:ECLiPSe的文檔可以在這裏找到:http://www.eclipseclp.org/doc/userman/umsroot.html和這裏:http://www.eclipseclp.org/doc/libman/libman。 HTML。不過,您應該已經收到了ECLiPSe安裝手冊。然後是Helmut Simonis的電子學習課程:http://4c.ucc.ie/~hsimonis/ELearning/index.htm和ECLiPSe教程介紹:http://www.eclipseclp.org/doc/tutorial/index。 HTML。最後,考慮在用戶郵件列表上詢問ECLiPSe的具體問題:https://lists.sourceforge.net/lists/listinfo/eclipse-clp-users – twinterer 2012-02-13 08:06:25