什么是Prolog中的 - >运算符,我该如何使用它?

问题描述 投票:9回答:3

我已经在一本书中读到了它,但根本没有解释。我也从未在程序中看到它。是Prolog语法的一部分吗?这是为了什么?你用它吗?

operators prolog
3个回答
8
投票

它代表了含义。仅当左侧为真时才执行右侧。因此,如果你有这个代码,

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.

(Qazxswpoi。)


3
投票

它是剪切的本地版本,例如参见SWI手册中的link to documentation

它主要用于实现if-then-else by(condition - > true-branch; false-branch)。一旦条件成功,就没有从真正的分支回溯到条件或进入错误分支的回溯,但是从if-then-else回溯仍然是可能的:

section on control predicated

因此它被称为局部切割。


0
投票

通过写一些更罗嗦的东西可以避免使用它。如果我重写?- 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

(是的,我不认为使用它有任何问题,但我的老板出于某种原因对它很偏执,所以我们总是使用上述方法。)

对于任何一个版本,您需要注意覆盖所有要覆盖的案例,特别是如果您有许多分支机构。

ETA:我不确定这是否完全等同于Stephan的,因为如果你有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 ). 的回溯。但我现在没有Prolog翻译来检查。

© www.soinside.com 2019 - 2024. All rights reserved.