prolog将函数作为变量传递,如何添加参数?
我有一个任意函数,我需要用不同的变量多次调用它。 顺便说一句,这是SWI序言prolog将函数作为变量传递,如何添加参数?,prolog,declarative,Prolog,Declarative,我有一个任意函数,我需要用不同的变量多次调用它。 顺便说一句,这是SWI序言 perform(V1,V2,V3,Function,Result):- % % do little stuf. % Function(Arg1,Arg2,Result). 这会导致语法错误 但是,在不添加参数的情况下将函数作为变量传递效果很好,如下代码所示: perform(Function):- Function. sayHello:- write('hello'
perform(V1,V2,V3,Function,Result):-
%
% do little stuf.
%
Function(Arg1,Arg2,Result).
这会导致语法错误
但是,在不添加参数的情况下将函数作为变量传递效果很好,如下代码所示:
perform(Function):-
Function.
sayHello:-
write('hello').
:-perform(sayHello).
那么如何向变量函数添加参数呢?特别是在SWI Prolog中,您可以使用
调用。引用手册:
呼叫(:目标,+ExtraArg1,…)
附加外部arg1、外部arg2。。。到
目标的参数列表并调用结果。例如,调用(加上(1),
2,X)将调用plus(1,2,X),将X绑定到3。电话/[2..]
构造由编译器处理。谓词调用/[2-8]是
定义为实(元)谓词,可供检查
通过当前谓词/1、谓词属性/2等更高
算术由编译器和运行时系统处理,但
谓词不可访问以进行检查
其中加号表示参数必须完全实例化为满足所需参数类型的术语,冒号表示参数是元参数(这也意味着“+”)。关于:
和+
参数的规范请向新手解释。:)如果我没有弄错的话,call/n现在是标准的一部分,因此它不是SWI-Prolog1的特定功能。元参数类似于谓词、目标或作为参数传递的子句;2) 我不确定该标准,但确实SWI不是唯一实现call/N的,SICStus也有(从版本4开始),我不确定其他方言…SWI中的模式通常与ISO模式不同。我不明白为什么调用(:Goal,+ExtraArg1)
应该有一个加号。想想?-调用(=(1),X)
。