Prolog Language
高次プログラミング
サーチ…
呼び出し/ N述語
述語のcall/N
ファミリは、実行時に任意のPrologの目標を呼び出すことができます。
?- G=true, call(G).
true.
?- G=(true,false), call(G).
false.
maplist / [2,3]
maplist/2
とmaplist/3
は高次述語であり、述語の定義を単一の要素についてそのような要素のリストに持たせることができます 。これらの述語は、 call/2
とcall/3
をビルディングブロックとして定義し、多くのPrologシステムとともに出荷することができます。
例えば:
?- maplist(dif(a), [X,Y,Z]).
dif(X, a),
dif(Y, a),
dif(Z, a).
メタコール
プロローグでは、いわゆるメタコールは、組み込みの言語機能です。すべてのPrologコードは、Prologの用語で表され、目標を動的に構築し、追加の述語を使用せずに他の目標と同様に使用することができます。
?- Goal = dif(X, Y), Goal.
dif(X, Y).
このメカニズムを使用すると、Prolog自体で他のより高次の述語を定義することができます。
foldl / 4
倍数 (左から)は次の間の高次の関係です。
- 3つの引数を持つ述語
- 要素のリスト
- 初期状態
- 最終状態は、述語を中間の状態を実行しながら連続した要素に適用した結果です。
例:リスト内のすべての要素の合計を表現するにはfoldl/4
を使用し、 2つの要素の合計を定義するために述語をビルディングブロックとして使用します。
?- foldl(plus, [2,3,4], 0, S).
S = 9.
目標のリストを呼び出す
ゴールのリストをゴールの組み合わせであるかのように呼び出すには、上位の述語call / 1とmaplist / 2を組み合わせます。
?- Gs = [X = a, Y = b], maplist(call, Gs). Gs = [a=a, b=b], X = a, Y = b.
Modified text is an extract of the original Stack Overflow Documentation
ライセンスを受けた CC BY-SA 3.0
所属していない Stack Overflow