2017-03-08 1 views
0

第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. 
+0

あなたはエキスパートシステムを構築したいが、書き込まれた言語について何か*分かっていない?それで幸運。 –

+1

このプログラムは 'known/3'が* dynamic *であることを期待しています(あなたが指摘した本はこれを示しています)。つまり、実行時に作成および管理されます。 Prologのドキュメントでは、動的述語の宣言方法について説明しています。あなたはそれを読むことができます。 – lurker

+1

修正されました。 @ lurkerが知っているように、/ 3は動的である必要があった。私は追加しました: - 動的(既知/ 3)。私のコードに変更し、問題を修正しました。ありがとう。 –

答えて

0

このプログラムはknown/3が動的であることを期待(そしてあなたがする指摘ブックはこれを言います)。つまり、実行時に作成および管理されます。 Prologのドキュメントでは、動的述語の宣言方法について説明しています。あなたはそれを読むことができます。 - lurker

関連する問題