2

私はメタプログラミングとDCGを使用して、Prologを使用してリストを句のリストに変換しようとしています。たとえば、[a、man、is、a、human]を[(human(X):-man(X))]に変換したいと思います。

構成要素のリストから用語を構成するために=..を使用できると思いました。たとえば、呼び出しTerm =.. [f,a,b,c]はTermをにバインドしf(a,b,c)ます。

私の問題は、DCGを使用してこれを組み合わせようとしていることです。これまで、DCGを使用して、文が有効な形式であるかどうかを確認してきました。

 %% syllogism( +S )
  % Holds if the sentence S is one of four syllogisms

  % a B is a C
  syllogism  --> article, subject, is_, (article ; [] ), subject .

  % some B is a C 
  syllogism  --> some, subject, is_, (article ; [] ), subject .

  % no B is a C
  syllogism  --> no, subject, is_, (article ; [] ), subject .

  % some B is not a C
  syllogism  --> some, subject, is_, not, (article ; [] ), subject .

  subject   --> [X] .
  some      --> [some] .
  is_       --> [is] .
  article   --> [a] .
  article   --> [every] .
  not       --> [not] .
  no        --> [no] .

ただし、DCGに依存しながら句のリストを作成できるように、これを変更しようとしています。

編集:基本的に私が達成しようとしているのは、リストLを取得し、句のリストを生成することです:[a、man、is、a、human]は[man(X):-human(X)]を生成する必要があります

同様に:[no、B、is、a、C]は[(false:-B(X)、C(X))]を生成する必要があります

御時間ありがとうございます。

4

1 に答える 1

1

メタインタープリターが必要になるようですhttp://ktiml.mff.cuni.cz/~bartak/prolog/meta_interpret.html

最終的に、Prolog のすべての問題は、適切な種類のメタインタープリターを使用することに帰着します。

于 2013-01-18T14:24:09.993 に答える