如果我有 :
run(X) :- X.
有什么区别:
... :- ..., call(Y).
和 :
... :- ..., run(Y).
最佳答案
如果你有:
运行(X):- X。
那么你可以看到它相当于使用了call/1
明确通过
?- 列表(运行/1)。
运行(A):-
调用(A)。
由此可知call(X)
也声明性地等效于 run(X)
.但是,除非您的 Prolog 编译器执行某种内联,否则使用 call/1
几乎可以肯定,直接比调用 run/1
至少非常非常有效。并调用 call/1
.
作为思考的食物,想想像 run(!)
这样的案例。 ,以及一般如何使用 !
如果 X
,在元调用中可能会影响程序不等于 call(X)
.
关于prolog - call/1 和 normal 子句有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48652069/