2010-06-09 152 views
2

我还在搞清楚prolog是如何工作的,并试图用if语句开发一个小型测试程序,但不能真正得到我需要的值。Prolog简单问题

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,所以我可以使用它作为另一个谓词的参数。此代码给出了一个错误,当条件为false时,我试过了:

prog([],[],Sy). 
prog(Sx,Sy) :- 
    Sx > 0 -> 
     update(Sx,10,S1), update(S1,10,S2), prog(S2,S2) ; 
     prog([],[],Sy). 

但是,只是返回true。

有人可以告诉我如何让它返回Sy吗?

感谢

+0

有人吗?我试过不同的方式,但无济于事:( – d0pe 2010-06-09 18:31:36

回答

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). 

等等,与第二个参数被绑定到每种情况下的“答案”。