Это мое задание: ![enter image description here](https://i.stack.imgur.com/GI9WG.png)
Моя попытка была:
a) Если Фред - отец Майка, то Фред - предок Майка.
father( X, Y ). /* X is father of Y */
ancestor( fred, mike ) :- father( fred, mike ).
б) животное - это млекопитающее, если это человек, или его родители были млекопитающими.
parent( X, Y ). /* X is parent of Y */
human( X ). /* X is human */
mammal( X ) :- human( X ).
mammal( X ) :- parent( P, X ), mammal( P ).
в) вы достигли окончательного состояния, если вы счастливы, здоровы и мудры.
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
в качестве учебника для этого курса.К сожалению, в книге очень мало примеров того, как преобразовать логические правила в нотацию Пролога.Хотя я закончил их все, большая часть моего ответа была на угадывание.Поэтому мне интересно, может ли кто-нибудь дать мне подсказку или предложение по моей работе выше.Любые идеи или отзывы приветствуются.
Спасибо,