我还在弄清楚prolog是如何运作的,并试图开发一个带有if语句的小测试程序,但却无法真正得到我需要的价值。
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,所以我可以将它作为另一个谓词的参数。当条件为假时,此代码会出错,我已尝试过:
prog([],[],Sy).
prog(Sx,Sy) :-
Sx > 0 ->
update(Sx,10,S1), update(S1,10,S2), prog(S2,S2) ;
prog([],[],Sy).
但只是返回true。
有谁能告诉我如何让它回归Sy?
由于
答案 0 :(得分:1)
Prolog规则不是“返回”值,箭头分号模式不是最惯用的方式。相反,你应该使用两个规则,每个规则对应一个Sx。我不确定你试图用你的例子代表什么。如果Sx不大于零,您期望Sy有什么价值?假设在这种情况下你希望Sy成为Sx:
prog(Sx, Sy) :- Sx > 0, update(Sx,10,S1), update(S1,10,S2), prog(S2,Sy).
prog(Sx, Sx) :- Sx <= 0.
要将其与另一个谓词一起使用,您可以执行以下操作:
prog(40, V),
write(V),
prog(V, Z),
write(Z).
依此类推,第二个参数在每种情况下都与“答案”绑定。