【发布时间】:2015-04-27 06:13:07
【问题描述】:
您好,我是 prolog 的新手,我正在尝试创建一个基本的家谱,所以我有这个:
/* Database for family. It consists of facts and rules. */
/* Facts */
female(ella).
female(jodi).
female(sonya).
male(arnold).
male(chris).
male(louis).
male(mark).
father_of(arnold, chris). /* arnold is the father of chris */
father_of(louis, mark).
father_of(mark, arnold).
mother_of(ella, sonya).
mother_of(jodi, ella).
mother_of(jodi, mark).
/* Rules */
grandmother_of(X, Z) :-
mother_of(X, Y),
(mother_of(Y, Z); father_of(Y, Z)).
familyquestions :-
grandmother_of(X, arnold),
write('The grandmother of Arnold is '), write(X), nl,
father_of(Y, mark),
write(Y), write(' is the father of Mark'), nl, nl.
但是,我试图这样做:
定义(添加到数据库中)一个名为 is_male(X) 的规则,如果 X 是某人的父亲,则返回“yes”(或“true”)。
请注意,如果系统找到“真实”答案并且不存在更多真实答案,则系统将返回“是”。系统将返回“true ?”如果它找到一个“真实”的答案并且可能还有更多的匹配项。在
在这种情况下,如果您键入“enter”,它将返回“yes”并停止。如果您键入“;”,它将继续搜索进一步的答案。
1.2 定义一个名为 is_female(X) 的规则,如果 X 是某人的母亲,则返回“yes”或“true”。
1.3 删除(注释掉)您已添加到数据库中的非必要事实(已被新规则 is_male/1 和 is_female/1 涵盖)。
所以我添加了这个
/* 家庭数据库。它由事实和规则组成。 */
/* Facts */
female(ella).
female(jodi).
female(sonya).
male(arnold).
male(chris).
male(louis).
male(mark).
father_of(arnold, chris). /* arnold is the father of chris */
father_of(louis, mark).
father_of(mark, arnold).
mother_of(ella, sonya).
mother_of(jodi, ella).
mother_of(jodi, mark).
/* Rules */
grandmother_of(X, Z) :-
mother_of(X, Y),
(mother_of(Y, Z); father_of(Y, Z)).
is_male(X, Y) :-
father_of(X, Y).
is_female(X, Y) :-
mother_of(X, Y).
familyquestions :-
grandmother_of(X, arnold),
write('The grandmother of Arnold is '), write(X), nl,
father_of(Y, mark),
write(Y), write(' is the father of Mark'), nl, nl.
但是当我运行它时,它给了我以下代码: 未捕获的异常:error(existence_error(procedure,is_male/1),top_level/0)
【问题讨论】:
-
欢迎来到 SO!由于您是新人,您可能需要查看此link。
标签: prolog