什么是call / 1和normal子句之间的区别?

时间:2018-02-06 21:14:44

标签: prolog call

如果我有:

 run(X) :- X.

有什么区别:

... :- ..., call(Y).

和:

... :- ..., run(Y).

1 个答案:

答案 0 :(得分:5)

如果你有:

run(X) :- X.

然后您可以看到等效通过

明确使用call/1
?- listing(run/1).
run(A) :-
        call(A).

由此可见,call(X)在声明上等同于run(X)。但是,除非您的Prolog编译器执行某种内联,否则直接使用call/1 几乎肯定比调用run/1至少非常非常有效,并且调用call/1 1}}。

作为思考的问题,请考虑像run(!)这样的案例,如果! ,那么在元调用中一般使用X会如何影响程序相当于call(X)