制約論理プログラミングその3

「制約論理プログラミングその3」の編集履歴(バックアップ)一覧に戻る

制約論理プログラミングその3 - (2014/05/09 (金) 11:53:22) の編集履歴(バックアップ)


今回は自然言語処理で実際に使うことを目的とした制約論理プログラミングを作ってみましょう。
通常prologでは単位説を使ってデータとして値を保存し、プログラムによって単位説を選んでいって、
ユニフィケーションしていくのですが、条件が複数含まれていたり(条件なしも含む)、
条件が動的に決まるような場合はプログラムが複雑になることがあります。
制約論理プログラミングではこの問題を解決してくれます。

サンプルを見てみましょう。
test:-
	freeze(A,member(X,['喜','怒','哀','楽'])),
	freeze(A,member(X,['怒','哀','楽'])),
	freeze(A,member(X,['哀','楽'])),
	freeze(A,member(X,['楽'])),
	A = true,
	write(X).

||?-test.
楽
yes
LOOP = 22

条件が4つあっても変数Xが4つ目の条件が終わるまでは値が決まらないので、記述が簡単にです。
条件が動的に代わる問題、例えば上の例の条件を反転してみましょう。

test:-
	freeze(A,member(X,['楽'])),
	freeze(A,member(X,['哀','楽'])),
	freeze(A,member(X,['怒','哀','楽'])),
	freeze(A,member(X,['喜','怒','哀','楽'])),
	A = true,
	write(X).

||?-test.
楽
yes
LOOP = 22