2

質問回答Prologファイルの作成中に問題が発生しました。私は場所を含むデータベースを持っており、すでに質問を取得して回答を書き出すことができます。ただし、オブジェクトにはさまざまな種類があり、さまざまなプレフィックスが必要です。そこで、プレフィックスにDCGを定義しました。

answer(P,A) :- location(P, Str, Nr),A = [there, is, article(G,K,N,P), noun(G,K,N,P), pre(P),Str,Nr].
question(A) --> questionsentence(P),{answer(P,A)}.

pre(P)  --> [in, P], {member(P, [road66])}.
pre(P)  --> [at, P], {member(P, [trafalgarsquare])}.

しかし、私が得るものは次のようなものです:

?-question(A, [where,is,a,kentuckys],[]).
A = [there, is, article(_G2791, _G2792, _G2793, kentuckys), noun(_G2791, _G2792, _G2793, kentuckys), prep(kentuckys), road66, 123] 

これは入力を正しく検証するために機能しますが、出力には役に立たないようです。句ではなく変数だけを取得するにはどうすればよいですか?

4

1 に答える 1

3

OK、私はプログラム全体を多かれ少なかれ有用で実用的な例に翻訳しようとしました。

location(kentuckys, road66, 121).
location(soliver, trafalgarsquare, 15).
location(marcopolo, trafalgarsquare, 15).
location(internist, jumpstreet, 21).

questionsentence(P,G) --> [where],[is], article(G), noun(G,P).
answer(P,A,G) :- location(P, Str, Nr), prep(W,Str), article(G,Art,[]), flatten([there, is, Art, P, W, Str,Nr], A).
question(A) --> questionsentence(P,G),{answer(P,A,G)}.

article(m) --> [a].
article(f) --> [an].
noun(m, P) --> [P], {member(P, [kentuckys, soliver, marcopolo])}.
noun(f, P) --> [P], {member(P, [internist])}.
prep([at],Str)  :- member(Str, [trafalgarsquare, road66]).
prep([in],Str)  :- member(Str, [jumpstreet]).

結果:

?- question(A, [where,is,a,kentuckys],[]).
A = [there, is, a, kentuckys, at, road66, 121] .

私が探していたのは、依存するDCG変数を決定するためのarticle(G、Art、[])のような構造だったと思います...実際、最後の2つの引数がどのように機能しているかはまだわかりません...

于 2012-05-30T21:46:16.267 に答える