这是我的任务:
我的尝试是:
a)如果弗雷德是迈克的父亲,那么弗雷德就是迈克的祖先。
father( X, Y ). /* X is father of Y */
ancestor( fred, mike ) :- father( fred, mike ).
b)如果动物是人或其父母是哺乳动物,则动物是哺乳动物。
parent( X, Y ). /* X is parent of Y */
human( X ). /* X is human */
mammal( X ) :- human( X ).
mammal( X ) :- parent( P, X ), mammal( P ).
c)如果你快乐,健康,聪明,你已经达到了最终状态。
happy( X ). /* X is happy */
healthy( X ). /* X is healthy */
wise( X ). /* X is wise */
attain_ultimate_state( X ) :- happy( X ), healthy( X ), wise( X ).
d)每只狗都喜欢所有人。
dog( X ). /* X is a dog */
people( Y ). /* Y is human */
like( X, Y ) :- dog( X ), people( Y ).
e)湖人队将赢得第2,3,5和7场比赛,但在新奥尔良的系列赛中输掉了其他3场比赛。
game( one ).
game( two ).
game( three ).
game( four ).
game( five ).
game( six ).
game( seven ).
win( laker, new_orleans, game( two ) ).
win( laker, new_orleans, game( three ) ).
win( laker, new_orleans, game( five ) ).
win( laker, new_orleans, game( seven ) ).
lose( laker, new_orleans, game( one ) ).
lose( laker, new_orleans, game( four ) ).
lose( laker, new_orleans, game( six ) ).
f)如果是P和Q,那么R或S
and( X, Y ). /* X and Y */
or( X, Y ). /* X or Y */
imply( X, Y ). /* X imply Y */
or( r, s ) :- and( p, q ).
g)P暗示Q等于非P与Q的分离。
and( X, Y ). /* X and Y */
or( X, Y ). /* X or Y */
imply( X, Y ). /* X imply Y */
imply( p, q ) == or( not( p ), q ).
h)P exclusive_or Q是P inclusive_or Q,但不是(P和Q)。
and( X, Y ). /* X and Y */
or( X, Y ). /* X or Y */
imply( X, Y ). /* X imply Y */
imply( p, q ) == or( not( p ), q ).
exclusive_or( X, Y ). /* X exclusive or Y */
inclusive_or( X, Y ). /* X inclusive or Y */
exclusive_or( p, q ) :- inclusive_or( p, q ), not( and( p, q ) ).
i)当下雨并且任何学生错过上课时,杰克很失望。
disappointed( X ). /* X is disappointed */
missed_class( X ). /* X missed class */
rain. /* it rains */
disappointed( jack ) :- rain, missed_class( _ ).
j)成为或不成为,这就是问题。
to_be( X ).
question( X ) :- to_be( X ).
question( X ) :- not( to_be( X ) ).
我们正在使用Concepts of Programming Languages by Robert W. Sebesta
作为本课程的教科书。不幸的是,很少有关于如何从书中将逻辑规则转换为Prolog符号的示例。虽然我完成了所有这些,但我的大部分答案都在猜测。所以我想知道是否有人可以给我一个关于我上面工作的提示或建议。欢迎任何想法或反馈。
谢谢,
答案 0 :(得分:1)
我只能想象我在你的班级,因为我们有相同的问题和书;)仅在1小时前发布,已经在谷歌上显示,哈哈
a)同样。
b)目前只要有一位父母是哺乳动物,这是真的,但是因为问题是'父母'而我第二次猜测教授问我们的一切,我特意检查了有一位母亲(M) ,X)和父亲(F,X),M和F是哺乳动物。c)相同
d)或多或少相同:喜欢(狗,X): - 人(X)。
e)叹息这是我向教授展示的,他似乎并不高兴。他说我让它变得更加复杂然后它需要......但他对这意味着什么并没有帮助。
game(1,newOrleans).
game(2,city1).
game(3,city2).
game(4,newOrleans).
game(5,cit2).
game(6,newOrleans).
game(7,city1).
win(X):-game(X,Y), not(city(Y)).
city(newOrleans).
f)你不需要暗示: - 代表暗示。我还在研究f-h。我问教授对这个问题的帮助,所有我可以离开他的是我不需要p(x)并且可以使用p和q。
j)相同,但我把它们放在一行';'做一个或
问题(X): - to_be(X);不是(to_be(X))。
我不是100%是对的。他可能是需要“成为”或“不成为”的问题 问题(砥);质询(nottobe)
quote(tobe).
quote(nottobe).
question(X):-quote(X).
<强>更新强>
忘了5i),这就是我所拥有的。
rain(tue).
skipped_class(tue,frank).
disappointed(jack,Day):-rain(Day), skipped_class(Day,Student).
因为下雨而坦率地跳过,杰克将会感到失望。不确定我是否做得对,但我会坚持这一点。
更新2
呃我刚刚意识到我可以使用true,false作为值而不是p。和q。
and(P,Q):-P,Q.
inclusive_or(P,Q):-P;Q.
exclusive_or(P,Q):-inclusive_or(P,Q),not(and(P,Q)).
P和Q的Exclusive_or如果包含或者(P或Q必须为真),并且p和Q都不为真,则为真。
- ?exclusive_or(真,真)。 假的。