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

Ihm*_*ahr 4 declarative prolog

我有这个任意函数,我需要用不同的变量多次调用.顺便说一句,这是SWI-Prolog

perform(V1,V2,V3,Function,Result):-
    % 
    % do little stuf.
    %
    Function(Arg1,Arg2,Result).
Run Code Online (Sandbox Code Playgroud)

这给出了语法错误.

但是将函数作为变量传递而不添加参数可以正常工作,如下面的代码所示:

perform(Function):-
    Function.

sayHello:-
    write('hello').

:-perform(sayHello).
Run Code Online (Sandbox Code Playgroud)

那么如何为变量函数添加参数呢?

Ale*_*nik 8

特别是在SWI-Prolog中你可以使用call.引用手册:

呼叫(:目标,+ ExtraArg1,......)

将ExtraArg1,ExtraArg2,...附加到Goal的参数列表中并调用结果.例如,call(plus(1),2,X)将调用plus(1,2,X),将X绑定到3.调用/ [2 ..]构造由编译器处理.谓词调用/ [2-8]被定义为真实(元)谓词,可通过current_predicate/1,predicate_property/2等进行检查.更高的arities由编译器和运行时系统处理,但谓词不是可供查阅.

其中加号表示argument must be fully instantiated to a term that satisfies the required argument type,而冒号表示agument is a meta-argument(这也暗示"+").

  • 1)元参数是谓词,目标或作为参数传递的子句之类的东西;2)我不确定标准,但实际上SWI不是唯一实现call / N的标准,SICStus也有(从版本4开始),我不确定其他方言... (2认同)