“Return” 0 if odd and same value if even in prolog
我是prolog的新手,所以统一的概念仍然很新,请耐心等待。
我想要类似的东西:
1 | pair(X,Y) |
像这样工作:
1 2 3 4 5 6 7 | ?- pair(4,Y). Y = 4, ?- pair(3,Y). Y = 0, |
但是我真的不知道该怎么做。我知道您可以使用类似X mod 2 =:= 0的对或错,但我不知道如何以prolog的方式编写" if this than that"代码。
除了使用CLPFD(有限域约束逻辑编程)以外,还有几种方法可以在Prolog中表达条件语句:
1)做出几条陈述,针对您要考虑的每种情况陈述一条,然后让Prolog执行机制找到合适的陈述:
1 2 | pair(X,Y) :- even(X), !, Y = X. % 'if X is even then Y = X' pair(_,0). % 'else Y = 0' |
在第二种情况下,统一是隐式的,但在第一种情况下,是显式的。
在第一个子句中使用cut运算符 2)使用 3)某些系统具有
2
3
4
5
6
7
8
?- pair(4,Y). | ?- pair3(4,Y).
|
Y = 4 ? ; | Y = 4 ? ;
|
Y = 0 ? ; % <- wrong behaviour! | no.
|
no |