0

私はPrologにDCGを持っており、次のようにクエリできます。

q(Tree, [name, of, company], []).

クエリを解析するためにたどったパスを示す応答を取得します。

Tree = q(['company (Class)', 'name (Attribute)'])

次に、次のようなクエリを実行します。

q(Tree, [name, of, acme], []).

用語と一致しない場合は、次acmeのような変数を作成したいと思いますAcme

Acme=会社
ツリー=q(['会社(クラス)'、'名前(属性)'])

私はSWI-Prologを使用していて、別の言語からクエリを実行しています。そのため、クエリはすべて小文字です。私の他のオプションは、すべての有効な用語のレキシコンを作成し、クエリ内のすべての不明なものを変数に置き換えることですが、Prologソリューションを望んでいます。

ありがとうございました。

4

1 に答える 1

1

すべてのプレフィックスベースのリストが必要であることを正しく理解していますか?次のことがあなたのために働きますか?

1 ?- p([name,of,company],L).
L = [name, of, company] ;
L = [name, of|_G456] ;
L = [name|_G453] ;
true.

2 ?- p([name,of,department,of,company],M).
M = [name, of, department, of, company] ;
M = [name, of, department, of|_G551] ;
M = [name, of, department|_G548] ;
M = [name, of|_G545] ;
M = [name|_G542] ;
true.

これが意図された動作である場合、それを実装するコードは次のようになります。

p([],[]).
p([X|Xs],[X|Ys]) :- p(Xs,Ys).
p([_|_],_).
于 2012-04-10T11:36:26.833 に答える