question about Prolog
Prologについて質問があります。
私は今Prologで簡易和英・英和翻訳機をつくろうとしているのですが、途中でつまづいています。
以下のようなPrologリストを読み込んで、``in rooms''を日本語に直そうとして
:-prep_phrase([in,rooms], [], B, []).
と入力すると、
B = [heya,no,naka,no]
と正しい答が返ってきますが、逆に``heya no naka no''を英語に直そうと
:-prep_phrase(A, [], [heya,no,naka,no], []).
と入力しても、無限ループに陥ってしまうようでエラーメッセージとして
``stack overflow''
が返ってきます。
トレースしてみたところ、noun_phrase と prep_phrase が交互に次々と呼ばれていました。
どうしてこのようなことが起こるのでしょうか(英->和はできているのに)。また、これを回避する方法はあるのでしょうか。
%% プログラムリストここから
%% 英語の「名詞+前置詞節」を日本語の「前置詞節+名詞」に
%% 翻訳する
%% ex. in rooms -> heya no naka no
%% 名詞節
noun_phrase(A, C, X, Z):-noun(A, B, Y, Z), prep_phrase(B, C, X, Y).
%% 前置詞節
prep_phrase(A, C, X, Z):-prep(A, B, Y, [no|Z]), noun_phrase(B, C, X, [no|Y]).
prep_phrase(A, A, X, X).
%% 前置詞
prep([in|A], A, [naka|X], X).
%% 名詞
noun([rooms|A], A, [heya|X], X).
%% プログラムリストここまで