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

时间:2012-05-12 12:39:40

标签: prolog declarative

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

perform(V1,V2,V3,Function,Result):-
    % 
    % do little stuf.
    %
    Function(Arg1,Arg2,Result).

这会产生语法错误。

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

perform(Function):-
    Function.

sayHello:-
    write('hello').

:-perform(sayHello).

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

1 个答案:

答案 0 :(得分:8)

特别是在SWI-Prolog中,您可以使用call。引用手册:

  

致电(:目标,+ ExtraArg1,......)

     

将ExtraArg1,ExtraArg2,...添加到   目标的参数列表并调用结果。例如,打电话(加(1),   2,X)将调用加(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(这也表示“+”)。