call/1 和普通子句有什么区别?
Whats the difference between call/1 and normal clause?
如果我有:
run(X) :- X.
有什么区别:
... :- ..., call(Y).
和:
... :- ..., run(Y).
如果你有:
run(X) :- X.
然后你可以看到它等价于通过
显式使用call/1
?- listing(run/1).
run(A) :-
call(A).
由此可知,call(X)
在声明上也等同于 run(X)
。但是,除非您的 Prolog 编译器执行某种内联,否则使用 call/1
直接 几乎可以肯定至少比调用 run/1
效率更高,并且有调用 call/1
.
作为思考的食物,想想像 run(!)
这样的情况,如果 X
不是 ,那么在元调用中通常使用 !
会如何影响程序 相当于 call(X)
.
如果我有:
run(X) :- X.
有什么区别:
... :- ..., call(Y).
和:
... :- ..., run(Y).
如果你有:
run(X) :- X.
然后你可以看到它等价于通过
显式使用call/1
?- listing(run/1). run(A) :- call(A).
由此可知,call(X)
在声明上也等同于 run(X)
。但是,除非您的 Prolog 编译器执行某种内联,否则使用 call/1
直接 几乎可以肯定至少比调用 run/1
效率更高,并且有调用 call/1
.
作为思考的食物,想想像 run(!)
这样的情况,如果 X
不是 ,那么在元调用中通常使用 !
会如何影响程序 相当于 call(X)
.