如果我有 :
run(X) :- X.
Run Code Online (Sandbox Code Playgroud)
有什么区别:
... :- ..., call(Y).
Run Code Online (Sandbox Code Playgroud)
并且:
... :- ..., run(Y).
Run Code Online (Sandbox Code Playgroud)
如果你有:
run(X) :- X.
然后你可以看到它等同于call/1明确使用via
?- listing(run/1).
run(A) :-
call(A).
从这一点来看,它call(X)也是声明性地等同于run(X).但是,除非你的Prolog编译器执行某种内联,否则call/1 直接使用几乎肯定至少非常非常,比调用run/1和调用更有效call/1.
作为精神食粮,认为这样的情况下run(!)使用,以及如何在一般的!超常电话,如果可能会影响节目X是不是等同于call(X).