mat*_*mat 5

如果你有:

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).