2016-10-20 9 views
0

私はユーザーの入力に基づいて刺激の状況を決定するコードを書いていますが、問題はそれが常に同じ出力を与え、規則に従って正しいものではないということです。 これは私のコードです:この単純なコードがPrologで正しく動作しないのはなぜですか?

start:- readenviroment(X),check(X,SS),environment(X,SS),write(SS). 


readenviroment(X):- 
write("What sort of environment is a trainee dealing with on the job?"),nl, 
read(X). 

environment(X,SS):- 
    visual(X,SS) ; verbal(X,SS). 

visual(X,SS):- 
((X == pictures ; X == illustrations ; X == photographs ; X== diagrams)->assert(yes(SS,cars))). 

verbal(X,SS):- 
((X == papers ; X == manuals ; X == documents ; X == textbooks)->assert(yes(SS,verbal))). 


:- dynamic yes/2. 
check(XX,SS):- 
verify(XX,SS),!. 

verify(XX,SS):- 
yes(XX,SS)->true. 

そして、これが出力されます。

 2 ?- start. 
What sort of environment is a trainee dealing with on the job? 
|: textbook. 
verbal 
true. 

3 ?- start. 
What sort of environment is a trainee dealing with on the job? 
|: diagram. 

false. 

4 ?- start. 
What sort of environment is a trainee dealing with on the job? 
|: diagrams. 
verbal 
true. 

これら二つの規則によります。

Rule 1: 
if the environment is papers 
or the environment is manuals 
or the environment is documents 
or the environment is textbooks 
then stimulus_situation is verbal 
Rule 2: 
if the environment is pictures 
if the environment is illustrations 
if the environment is photographs 
if the environment is diagrams 
then stimulus_situation is visual 

誰でも私をお手伝いできますか?また、アドバンスで感謝します。

+0

/どのようにしている場合はこれらの規則はコード化されている彼らはコードに現れないものを指します。 –

+0

@ScottHunterこれらのルールは、視覚的および口頭の機能でエンコードされています。 –

+0

投稿されたコードの中には、論文、マニュアル、文書、教科書、写真、イラスト、写真、図などはありません。 –

答えて

0

コードには多くの問題があります。直接の問題は、environment/2の前にcheck/2が呼び出されていることです。

しかし、Prologインタープリタの動作を理解しているとは思われません。たとえば、変数SSはコード内のどこにもバインドされません。

あなたは次のように自分のルールをモデル化することによって起動することができます。

env_stim(Env, verbal) :- member(Env, [paper, manuals, documents, textbooks]) 
env_stim(Env, visual) :- member(Env, <etc>). 
<etc>. 

次に、あなただけのenv_stim(Env, Stim)を呼び出し、応答を書き出し、Env変数をユーザに尋ねる:

start :- 
    writeln('What is the environment?'), 
    read(Env), 
    env_stim(Env, Stim), 
    writeln(Stim). 
関連する問題