0

我在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似乎忘记了以前的知识。谁能帮我这个?

问候。

4

1 回答 1

1

你打电话给male/1,而(在你发布的代码中)只有male/2。这通常会导致异常,除非将 male/1 声明为动态的;那么,male(N) 将永远为假。我想在某些序言变体中,即使它是静态的,它也总是被认为是错误的;你用的是什么序言版本?

断言新数据使用asserta/1 或 assertz/1;prolog 没有您注意到的内存!

于 2011-12-11T20:39:43.043 回答