Prolog simple question
我仍在弄清楚 prolog 的真正工作原理,并试图开发一个带有 if 语句的小型测试程序,但无法真正得到我需要的值。
1 2 3 4 5 6 7 | prog(Sx,Sy) :- Sx > 0 -> update(Sx,10,S1), update(S1,10,S2), prog(S2,S2) ; Sy. update(S,V,RES) :- RES is S-V. |
我希望 prog 将 Sy 作为答案而不是 true,因此我可以将其用作另一个谓词的参数。当条件为假时,此代码会出错,我尝试过这样做:
1 2 3 4 5 | prog([],[],Sy). prog(Sx,Sy) :- Sx > 0 -> update(Sx,10,S1), update(S1,10,S2), prog(S2,S2) ; prog([],[],Sy). |
但只返回true。
谁能告诉我如何让它返回 Sy?
谢谢
Prolog 规则不会"返回"值,而箭头分号模式并不是最惯用的方法。相反,您应该使用两条规则,一条用于 Sx 的每种情况。我不确定你想用你的例子来代表什么。如果 Sx 不大于零,您期望 Sy 具有什么值?假设在这种情况下您希望 Sy 成为 Sx:
1 2 | prog(Sx, Sy) :- Sx > 0, update(Sx,10,S1), update(S1,10,S2), prog(S2,Sy). prog(Sx, Sx) :- Sx <= 0. |
要将它与另一个谓词一起使用,您可以执行以下操作:
以此类推,在每种情况下,第二个参数都绑定到"答案"。