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。マニュアルの引用:

call(:Goal、+ ExtraArg1、...)

ExtraArg1、ExtraArg2、...を目標の引数リストに追加し、結果を呼び出します。たとえば、call(plus(1)、2、X)はplus(1、2、X)を呼び出し、Xを3にバインドします。call/[2..]構文はコンパイラーによって処理されます。述語call/[2-8]は実際の(メタ)述語として定義され、current_predicate / 1、predicate_property / 2などを介して検査できます。より高いarityはコンパイラとランタイムシステムによって処理されますが、述語は処理されません。検査のためにアクセス可能。

ここで、プラスは、を示し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 に答える