3

Prolog プログラマーに非常に簡単な質問があります。これは非常に簡単なはずですが、私はその言語の経験がないので、助けてください。Prolog で単純なプログラミング言語を解釈しようとしています。この言語では、単純変数と配列変数の 2 種類の変数を使用できます。特定の変数の値を計算する関数があります。

%calc(+var, +state, -result)

variable は、 のような単純な変数xまたは のような配列変数のいずれかarray(ident, index)です。その関数を Prolog でどのように記述すればよいかわかりません。そのため、通常の変数と配列変数では異なることを行います。私はこのようなものを思いついた:

calc(array(Ident,I), S, R) :- calculating R for array var, !.
calc(Ident, S, R) :- calculating R for regular var.

これは機能しますが、もっと良い方法があるはずです。

4

1 に答える 1

3

それを行うためのクリーンな方法があります。変数に専用のラッパーを使用して、パターン マッチングで識別できるようにします。例えば:

calc(array(Ident,I), S, R)  :- calculating R for array var.
calc(variable(Ident), S, R) :- calculating R for regular var.

ファンクターvariable/1を使用して変数を識別しました。

!/0この表現を処理する必要はありません。述語を真の関係として、つまりすべての方向で使用できます。

特定のプログラムの解析中または解析後に、専用のファンクターで変数をラップする前処理ステップが必要になる場合があります。その後、このきれいな表現が得られ、プログラムの残りの部分でパターン マッチングを使用できます。

于 2014-05-26T08:03:19.247 に答える