2013-11-27 66 views
0

我剛開始首次使用Prolog,並且必須實施專家系統。我想要診斷某人是否擔心黑暗,如果他/她似乎無法在黑暗中看到事物並且似乎在黑暗中感覺不到保護。這裏是我的代碼爲這種情況:剛剛開始Prolog ...需要幫助製作小型專家系統

fear(dark) :- positive(cantSee), positive(unprotectedInDark). 

但是,我不認爲我確定這是正確的代碼工作。這裏是我的代碼做出了積極的(X)「是」:

positive(X) :- ask(X, yes). 
ask(X, yes) :- write(X), write('? '), read(yes). 

同樣的,這裏是我的代碼爲負(X):

negative(X) :- ask(X, no). 
ask(X, no) :- write(X), write('? '), read(no). 

這是正確的代碼,我上面的問題呢?另外,如何讓我的專家系統「記住」一個答案?這個代碼是在我的腦海裏,但我不認爲這一個工程:

remember(X, yes) :- assert(ask(X, yes)). 
remember(X, no) :- assert(ask(X, no)). 
+0

通過記住,你的意思是,你希望你的程序記住它,而正在執行它,或者你關閉該文件,然後再執行它甚至後? – Shevliaskovic

+0

記住,我的意思是說,如果我對某個問題回答「是」,系統會將答案保留爲「是」,並且不能更改它。例如,一旦答案是肯定的,我不能將它改變爲否。 – guest5555

+0

專家系統似乎是一個剛剛學習Prolog的積極的第一個項目。如果您不希望覆蓋寫入的答案,則可以檢查它是否已被聲明,並且不收回並斷言新的答案。還是有一個原因,不適合你的情況? – lurker

回答

0

也許問/ 2應該檢查之前,如果問題已經回答。

:- dynamic remember/2. 

ask(What, YN) :- remember(What, YN), !. 
ask(What, YN) :- write(What), write(?), 
    read(YN), /* should validate user'answer */, 
    assertz(remember(What, YN)).