我在序言中有这个知识库...

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”不是男性),但它再次询问“这是男性吗?”。 序言似乎忘记了以前的知识。 谁能帮我这个?

问候。

===============>>#1 票数:1

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

使用asserta / 1或assertz / 1声明新数据; 如您所知,序言没有记忆!

  ask by Masood Delfarah translate from so

未解决问题?本站智能推荐: