2011-12-11 47 views
0

我在序言中這方面的知識基礎...事實在序言中,我已經檢查之前

start :- navabi(C). 
male(X,N) :- 
    write('Is this a male? '), flush_output, 
    read(yes). 

navabi(N):- male(N) -> print('he is navabi') ; mirian(N). 
mirian(N):- not(male(N)), print('she is ms.mirian'). 
female(X) :- not(male(X)). 

的問題是,當我啓動該程序,然後輸入一個人誰不是一個男性,使程序進入密裏安。然後再打印另一張,然後再次查看該人是否是男性(但是他們知道這個'N'不是男性),但它再次詢問'這是男性嗎?'。 看來,序言忘記了以前的知識。誰能幫我這個?

關於。

+0

請給你的程序的其餘部分,準確地輸入你究竟輸入了什麼,結果到底是什麼。 Atm程序沒有編譯('male/1'沒有被定義),你用來輸入誰是男性,誰不是,並且跟蹤這個的過程是完全不清楚的。 – m09

回答

1

您呼叫男性/ 1,而在您發佈的代碼中只有男性/ 2。這通常會導致例外,除非男性/ 1被宣佈爲動態;那麼,男性(N)將永遠是假的。我猜想在某些序言變體中,即使它是靜態的,它總是可以被認爲是假的;你使用什麼prolog版本?

來聲明新的數據使用asserta/1 or assertz/1; prolog沒有記憶,因爲你注意到了!

相關問題