如何将逻辑规则转换为Prolog表示法?

时间:2011-05-07 22:11:28

标签: prolog

这是我的任务: enter image description here

我的尝试是:
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符号的示例。虽然我完成了所有这些,但我的大部分答案都在猜测。所以我想知道是否有人可以给我一个关于我上面工作的提示或建议。欢迎任何想法或反馈。

谢谢,

1 个答案:

答案 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(真,真)。 假的。