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

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

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

2回复

比较序言中的事实时获得重复答案

使用SWI-Prolog。 我有一个行列清单说: 我正在努力制定一条规则,以打印/返回具有相同等级的任何事实。 因此,在这种情况下,它将与伦敦和纽约一起返回。 到目前为止,这是我要提出的问题,唯一的问题是我得到的重复项(尽管按照当前规则完全可以理解)。 使用递归会有所帮助吗?
2回复

序言中的困难

我需要使用Prolog解决逻辑问题。 我只有一个问题: 在答案中,没有出现属性名称。 我生成属性的代码是: 但是在执行查询后,它看起来像这样: “ _G * 某物 ”在哪里?我想显示属性的名称 (在这种情况下,仅是学生人数)。 编辑 : 添加整个代码:
2回复

列为序言中的图形

我正在尝试生成从矩阵中的一个元素到另一个元素的所有可能的“路线”,主要条件是说,只有当元素共享至少一个角时,矩阵中的元素才能与其他元素连接,因此在该矩阵中 1只能与2,4,5连接,而4与所有元素都连接。 是否可以在不使用吸引的情况下将该列表表示为图形? 也许我可以找到更简单的方法
2回复

序言中的顺序演算

我真的是Prolog中的新编程。 我必须在Prolog中编写顺序演算规则,我认为我做对了。 如果公式有效,则代码应返回true,否则无效。 这是我的代码: 如果公式有效,则返回true。 但是,如果我使用无效的公式运行代码,它将永远不会结束,而且我真的不知道该如何解决。
1回复

事实之后的序言削减

我在Prolog中,我有这个事实: 我想在这个事实之后削减 但是Prolog编译器不允许我这样做。 为什么不正确? (选择此事实后,我想防止回溯)
1回复

在序言中表达方程式

事实给出了合取和取反表。 写一个谓词:“ AX ^ 2 + BX + C = 0的解是X”。 所有值均为布尔值,1-真,0-假。 事实表是这样的: 我不知道该怎么做,从哪里开始。
1回复

将元素追加到序言中的列表

我有5个具有收入属性的成员的数据库。 我想总结所有成员的收入。 为此,我想创建一个收入列表并将其添加。 为了创建收入列表,我将附加谓词写为 这会将元素添加到列表中,并在outputlist中返回它。 现在,我要获取每个成员的收入并将其放入列表中并添加列表中的元素。 但是
1回复

序言中的二叉树

可以用2个谓词来定义二叉树: emptyBT ,空的二叉树。 BTTree(N,T1,T2)如果N是具有左子树T1和右子树T2的二叉树的根,则为true,其中T1中的所有项目均小于或等于N并且T2中的所有项目均大于比N 编写实现以下谓词的Prolog程序: 如
1回复

序言中的Horn子句是什么?

我不明白序言中的Horn子句是什么。 •Horn子句是仅包含一个正文字的子句。 因此,对于这个而言,它不是horn子句,因为它具有多个子句? 还是有什么方法可以将其表达为号角子句?
1回复

数学中的序言-在序言中搜索节点的级别

假设这里是一个二叉搜索树,并且给出了规则above(X,Y) X在Y正上方。 我还创建了规则root(X) X没有父项。 然后,我试图弄清楚这棵树中节点的深度。 假设树的根节点是“ r”,所以我得到了事实level(r,0) 。 为了实现规则level(N,D) :- ,我在想的是应