prolog将函数作为变量传递,如何添加参数?

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'

我有一个任意函数,我需要用不同的变量多次调用它。 顺便说一句,这是SWI序言

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)