第1に、私はプロローグプログラマーではありません。私は小さなエキスパートシステムを構築する学校の課題をしています。私は割り当てのためのプロローグを使用することを選んだ、私はこの本に従っている:http://www.amzi.com/distribution/files/xsip_book.pdf。具体的には私は第2章を見ています。プロローグ存在エラー例外
この本には「ask」という使い方があります。これは14ページにあります。質問すると、「既知」と呼ばれる別の手順が使用され、質問に対する回答が記憶されます。私は基本的に私のコードで使用するためにこのプロシージャをコピーしましたが、 "既知の"プロシージャに関連する存在エラーが発生しています。プロローグのプログラマーではなく、私はそれをどのようにデバッグするのか分かりません。うまくいけば誰かが助けることができる。ここで
は、私のコードの実行例である:ここで
| ?- species(X).
uncaught exception: error(existence_error(procedure,known/3),ask/2)
コードです:
species(limba) :- %There are a bunch of these
distribution(west_africa),
color(tan_with_black_streaks),
figure(plain),
janka_hardness(670),
workability(easy).
distribution(X) :- ask(distribution, X).
color(X) :- ask(color, X).
figure(X) :- ask(figure, X).
janka_hardness(X) :- ask(janka_hardness, X).
workability(X) :- ask(workability, X).
ask(A, V) :-
known(yes, A, V),
!.
ask(A, V) :-
known(_, A, V),
!,
fail.
ask(A, V) :-
write(A:V),
write('? : '),
read(Y),
asserta(known(Y, A, V)),
Y == yes.
あなたはエキスパートシステムを構築したいが、書き込まれた言語について何か*分かっていない?それで幸運。 –
このプログラムは 'known/3'が* dynamic *であることを期待しています(あなたが指摘した本はこれを示しています)。つまり、実行時に作成および管理されます。 Prologのドキュメントでは、動的述語の宣言方法について説明しています。あなたはそれを読むことができます。 – lurker
修正されました。 @ lurkerが知っているように、/ 3は動的である必要があった。私は追加しました: - 動的(既知/ 3)。私のコードに変更し、問題を修正しました。ありがとう。 –