我是prolog的新手,所以统一的概念仍然是新的,所以请耐心等待。
我想要类似的东西:
pair(X,Y)
就是这样:
?- pair(4,Y).
Y = 4,
?- pair(3,Y).
Y = 0,
但我真的不知道该怎么做。我知道你可以使用像X mod 2 =:= 0这样的东西,无论是真还是假,但我不知道如何用prolog的方式制作“if this than than”代码。
答案 0 :(得分:0)
除了使用CLPFD(有限域上的约束逻辑编程)之外,还有几种方法可以在Prolog中表达条件语句:
1)制作几个陈述,每个案例对应一个你正在考虑,并让Prolog执行机制找到合适的陈述:
pair(X,Y) :- even(X), !, Y = X. % 'if X is even then Y = X'
pair(_,0). % 'else Y = 0'
在第二种情况下,统一是隐含的,但在第一种情况下它是明确的。
_
符号是'匿名变量的语法糖,这是我们不关心的绑定变量,我们不使用它。
在第一个子句中使用 cut运算符 !
告诉Prolog如果第一个子句成功,它不应该尝试为Y
找到其他解决方案(如,回溯并尝试第二个条款):
% without cut | % with cut
?- pair(4,Y). | ?- pair3(4,Y).
|
Y = 4 ? ; | Y = 4 ? ;
|
Y = 0 ? ; % <- wrong behaviour! | no.
|
no |
2)使用(Condition -> ThenStatement ; ElseStatement)
if-then-else结构:
pair(X,Y) :- (even(X) -> Y = X ; Y = 0).
Condition
参数中不允许剪切。使用Condition
的第一个解决方案。
3)某些系统具有if/3
谓词,评估为if(Condition,ThenStatement,ElseStatement)
:
pair(X,Y) :- if( even(X), Y = X, Y = 0).
Condition
参数中不允许剪切。