#prolog
#prolog
Вопрос:
Это мое задание:
Моей попыткой было:
а) Если Фред — отец Майка, то Фред — предок Майка.
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 ).
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 эквивалентно разделению not 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. Боже, длинный пост. Вы не беспокоитесь о том, что остальная часть вашего класса увидит ваше задание дословно онлайн?
2. @mssingno: Все в порядке, я не возражаю. Я заплатил за свой класс, поэтому все, что я узнал, важнее.
Ответ №1:
Я могу только представить, что я в вашем классе, поскольку у нас одинаковые вопросы и книга 😉 Опубликовано всего 1 час назад, а оно уже появилось в Google, лол
a) То же самое.
б) В настоящее время это было бы верно до тех пор, пока есть один родитель, который является млекопитающим, но поскольку в задаче указано «родители», и я 2-й догадываюсь обо всем, о чем спрашивает нас профессор, я специально проверил, что есть мать (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%. Он может быть вопросом, который должен быть «быть» или «не быть» вопросом (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. и q .
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 являются истинными.
?-exclusive_or(истина,true). false.
Комментарии:
1. @TheDPQ: Спасибо, приятель! Я предполагаю, что мне придется переделать f-h, и нам, возможно, придется добавить правила для exlusive_or и inclusive_or, преобразовав их в эквивалентную логику
and
иor
.2. 5e) win(X):-member(X,[2,3,5,7]).
3. 5f) p. q. или (X, Y):-p, q. все еще кажется странным, но я не думаю, что нам нужна функция AND в качестве подцели, поскольку ‘,’ делает это за нас.
4.
and
,or
и:-
— это то, что у нас было. Я думаю, мы должны придумать что-то, что охватывает эти операции.5. Почему у вас было дополнительное свойство для 5i)? Я не понимаю. Вы уверены насчет 5e). Я не понимаю, как мы можем интерпретировать это таким образом. Я предполагаю, что у него должно быть как минимум два параметра, один для laker и один для new orleans. В противном случае они не имеют отношения друг к другу.