5

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

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

这会产生语法错误。

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

perform(Function):-
    Function.

sayHello:-
    write('hello').

:-perform(sayHello).

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

4

1 回答 1

9

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

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

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

其中加号表示 ,argument must be fully instantiated to a term that satisfies the required argument type冒号表示agument is a meta-argument(这也意味着“+”)。

于 2012-05-12T14:50:20.713 回答