如果我有:
run(X) :- X.
有什么区别:
... :- ..., call(Y).
和:
... :- ..., run(Y).
答案 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)
。