2011-12-11 33 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没有记忆,因为你注意到了!

相关问题