2012-05-12 9 views
4

私はさまざまな変数で何度も呼び出す必要があるこの任意の関数を持っています。 はところで、これはこれは、構文エラーを与えるプロローグは変数として関数を渡し、引数を追加する方法は?

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

SWI-Prologのです。

しかし、引数を追加することなく、変数としての機能を渡すには、次のコードのように正常に動作します:

perform(Function):- 
    Function. 

sayHello:- 
    write('hello'). 

:-perform(sayHello). 

変数関数に引数を追加するために、どのように?

答えて

8

特にSWI-Prologではcallを使用できます。

コール:マニュアル引用(:目標、+ ExtraArg1、...)を

追加ExtraArg1、ExtraArg2、...目標の 引数リストにし、その結果を呼び出します。たとえば、call(plus(1)、 2、X)はplus(1,2、X)を呼び出し、Xを3にバインドします。call/[2 ..] 構文はコンパイラによって処理されます。述部呼び出し/ [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(これはまた、「+」を意味)ことを示していることを示している

+1

':'と '+'引数の指定は、初心者に説明します。 :) –

+0

ありがとう、私は+とのコメントを追加しました: –

+2

"メタ引数"は何ですか? :) –

関連する問題