我在一本书中读到了这个,但是它没有被解释。我也从来没有在程序中看到过它。它是Prolog语法的一部分吗?它有什么作用?你会使用它吗?
我在一本书中读到了这个,但是它没有被解释。我也从来没有在程序中看到过它。它是Prolog语法的一部分吗?它有什么作用?你会使用它吗?
它代表着暗示。只有当左侧为真时,右侧才会被执行。因此,如果您有以下代码:
implication(X) :-
(X = a ->
write('Argument a received.'), nl
; X = b ->
write('Argument b received.'), nl
;
write('Received unknown argument.'), nl
).
然后它将根据其参数编写不同的内容:
?- implication(a).
Argument a received.
true.
?- implication(b).
Argument b received.
true.
?- implication(c).
Received unknown argument.
true.
false -> false
应该输出 true
,但实际上并不是这样。这是怎么回事? - Błażej Michalik?- member(X,[1,2,3]), (X=1 -> Y=a ; X=2 -> Y=b ; Y=c).
X = 1,
Y = a ;
X = 2,
Y = b ;
X = 3,
Y = c.
?- member(X,[1,2,3]), (X=1, !, Y=a ; X=2 -> Y=b ; Y=c).
X = 1,
Y = a.
可以通过写更多的文字来避免使用它。如果我重写Stephan's谓词:
implication(X) :-
(
X = a,
write('Argument a received.'), nl
;
X = b,
write('Argument b received.'), nl
;
X \= a,
X \= b,
write('Received unknown argument.'), nl
).
(是的,我不认为使用它有任何问题,但我的老板出于某种原因很偏执,所以我们总是使用上述方法。)
无论哪个版本,你都需要小心,确保覆盖所有你打算覆盖的情况,特别是如果你有许多分支。
预计到:如果你有implication(X)
,由于回溯,我不确定这是否完全等同于Stephan的。但我现在没有Prolog解释器来检查。