私はプロローグを使用して辞書のようなプログラムに取り組んでおり、コードは次のようになります。
define(car,vehicle).
define(car,that).
define(car,has).
define(car,four).
define(car,wheels).
define(wheels,round).
define(wheels,object).
define(wheels,used).
define(wheels,in).
define(wheels,transportation).
defined(X):-define(X,_).
anotherdefined(X):- \+ undefined(X).
undefined(X):- \+define(X,_).
私は私に与える defined/1 述語を書こうとしています:
?-defined(X).
X = car ;
X = wheels ;
false.
それでも、私の defined/1 は、X=car.
それがカウンターするたびに (当然のことながら) 5 回与えられ、私のdefine(car,_).
anotherdefined/1 は私にしか与えません。true.
define(car,_).
define(wheels,_).
編集: 次の行を書いて、givedefinedword/1 で必要な結果を取得しました。
listdefined(X):-findall(Y,defined(Y),Z),sort(Z,X).
givedefinedword(X):-listdefined(List),member(X,List).
ただし、効率的な述語 (他の多くの述語で使用します) が必要だったので、それは目的に勝っています。この述語は処理が多すぎます。
それとも、コードを修飾する述語を使用した方が良いでしょうか? say は、定義済みの単語のリストを作成し、新しい定義が追加されたときにそれを変更します。
ありがとう。