Как преобразовать логические правила в нотацию Пролога? - PullRequest
1 голос
/ 08 мая 2011

Это мое задание: enter image description here

Моя попытка была:
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 в качестве учебника для этого курса.К сожалению, в книге очень мало примеров того, как преобразовать логические правила в нотацию Пролога.Хотя я закончил их все, большая часть моего ответа была на угадывание.Поэтому мне интересно, может ли кто-нибудь дать мне подсказку или предложение по моей работе выше.Любые идеи или отзывы приветствуются.

Спасибо,

1 Ответ

1 голос
/ 08 мая 2011

Я могу только представить, что я в вашем классе, так как у нас одни и те же вопросы и книга;) Только опубликовано 1 час назад, и оно уже отображается в Google, lol

a) То же самое.

б) В настоящее время это будет верно, если есть один родитель, который является млекопитающим, но поскольку проблема говорит о «родителях», и я догадываюсь, что все, о чем нас спрашивает профессор, я специально проверил, что есть мать (М,X) и отец (F, X) и что M и F являются млекопитающими.

в) То же

г) более или менее одинаково: лайки (собака, Х): - человек (Х).

е) вздох Это то, что я показал профессору, и он не выглядел счастливым.Он сказал, что я сделал это более сложным, чем это должно было быть ... но он бесполезен в том, что это значит.

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) Вам не нужно подразумевать там, как: - означает подразумевать.Я все еще работаю над FH.Я попросил профессора помочь с этим, и все, что я мог от него получить, это то, что мне не нужен p (x) и я могу просто использовать p и q.

j) То же самое, но у меня они на одной строке с ';'чтобы ответить на вопрос или

(X): - to_be (X); не (to_be (X)).

Что я не на 100% прав.Он может быть вопросом должен быть «быть» или «не быть» вопрос (tobe); вопрос (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.и д.

and(P,Q):-P,Q.
inclusive_or(P,Q):-P;Q.
exclusive_or(P,Q):-inclusive_or(P,Q),not(and(P,Q)).

Значение Exclusive_or для P и Q будет истинным, если оно включено или (либо P, либо Q должно быть истинным), а не оба значения p и Q равны true.

? - exclusive_or (true, true).ложь.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...