【发布时间】:2015-04-29 02:20:20
【问题描述】:
我有一个关于我遇到的错误的快速问题。我是 prolog 的新手,所以如果它是一个简单的修复,请原谅。
这是我想要做的:
考虑问题 1 中创建的数据库。在实现以下规则时,您可以添加额外的规则以使您的实现更容易。
2.1 添加以下规则集以扩展成员之间的家庭关系: (1)parent_of,(2)兄弟姐妹,(3)uncle_of,(4)uncleOrAunt_of,(5)配偶,和(6)后代
2.2 将至少 10 个事实添加到数据库中。这些新事实应显示家庭成员之间的一致关系,并且必须确保 (1) 没有冲突事实,(2) 没有冗余信息,(3) 问题 2.1 中定义的每个规则都可以为至少一组参数返回“是”值.
2.4 在数据库末尾添加一个名为fullQuestions 的规则,以测试您在作业中定义的所有规则。包括足够的书面陈述,以便打印个别问题的答案。确保复合问题可以终止(不会导致“死循环”)。将输出包含为 cmets。
这是我目前得到的:
/* 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(X,Y) :-
parent_of(X,Y), is_male(X).
father_of(arnold, chris). /* arnold is the father of chris */
father_of(louis, mark).
father_of(mark, arnold).
mother_of(X,Y) :-
parent_of(X,Y), is_female(X).
mother_of(ella, sonya).
mother_of(jodi, mark).
child(X, Y) :-
parent_of(Y, X).
parent_of(X, Y) :-
child(Y, X).
parent_of(jodi, ella).
parent_of(jodi, mark).
parent_of(louis, mark).
parent_of(mark, arnold).
parent_of(jose, sergio).
parent_of(ana, sergio).
parent_of(jose, gio).
parent_of(ana, gio).
parent_of(joe, jose).
parent_of(mary, jose).
/* Rules */
grandmother_of(X, Z) :-
mother_of(X, Y),
(mother_of(Y, Z); father_of(Y, Z)).
is_male(X) :-
father_of(X, _).
is_female(X) :-
mother_of(X, _).
sibling_of(X, Y) :-
parent_of(Z, X), parent_of(Z, Y).
sister(X,Y) :-
siblings(X,Y), is_female(X), X \= Y.
brother(X,Y) :-
siblings(X,Y), is_male(X), X \= Y.
uncle_of(X,Y) :-
brother(X,Z), mother_of(Z,Y).
uncle_of(X,Y) :-
brother(X,Z), father_of(Z,Y).
uncleOrAunt_of(X, Y) :-
brother(X,Z), mother_of(Z,Y).
uncleorAunt_of(X, Y) :-
brother(X,Z), father_of(Z,Y).
uncleorAunt_of(X, Y) :-
sister(X,Z), father_of(Z,Y).
uncleorAunt_of(X, Y) :-
sister(X,Z), mother_of(Z,Y).
spouse_of(X,Y) :-
child(P, X), child(P, Y).
ancestor( X , Y ) :-
parent_of( X , Y ).
ancestor( X , Y ) :-
parent_of( X , Z ) , ancestor( Z , Y ).
descendant_of(X, Y) :-
ancestor(Y, X).
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.
但是,当我尝试编译它时,我得到了多个错误:
/tmp/gplcExLkpg.o:在函数`predicate(sister/2)'中:
(.text+0x7b3): 未定义引用`predicate(siblings/2)'
/tmp/gplcExLkpg.o:在函数`predicate(brother/2)'中:
(.text+0x843): 对`predicate(siblings/2)'的未定义引用
collect2: 错误:ld 返回 1 个退出状态
编译失败
【问题讨论】:
-
您在
parent_of(mary, jose),中有错字。它应该以点而不是逗号结尾。 -
哦,好的,谢谢!我修复了它,但现在我有两个不同的错误?
-
family.pl:64-65:警告:不连续谓词 parent_of/2 - 子句忽略 family.pl:75:致命错误:重新定义控制构造 (',')/2 编译失败
标签: prolog