我之前检查过的prolog中的事实

时间:2011-12-11 20:06:42

标签: prolog logic inference

我在prolog中有这个知识基础......

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)).

问题在于,当我启动这个程序并输入一个不是男性的人时,程序会转到mirian。然后我打印另一个,它再次看看那个人是否是男性(但它大声知道这个'N'不是男性)但它再次问'这是男性吗?'。 似乎prolog忘记了以前的知识。任何人都能帮助我吗?

问候。

1 个答案:

答案 0 :(得分:1)

你叫男/ 1而(你发布的代码中)只有男/ 2。这通常会导致异常,除非男性/ 1被宣布为动态;那么,男(N)永远是假的。我想在一些prolog变种中,即使它是静态的,它也总是被认为是假的;您使用的prolog版本是什么?

断言新数据使用asserta/1 or assertz/1; prolog没有你注意到的记忆!