Моделирование действия и реакции в Прологе - PullRequest
1 голос
/ 19 мая 2019

Я хочу смоделировать действие и реакцию в Прологе. Например, в игре с двумя игроками в кости есть два элемента удачи и игры. Когда кости бросают низкое значение, это неудача, а когда игрок делает хороший ход, это хорошая игра. Таким образом, мы можем иметь эти примеры запросов:

reaction(good, luck, player).
reaction(bad, play, opponent).

Существует список реакций, таких как смайлики, которые выражают чувства игрока в отношении данного действия. И для каждого чувства, такого как счастье или гнев, существует более одного смайлика, но только один должен быть выбран предпочтительно случайно или с взвешенным случайным образом.

Я новичок в Прологе, и у меня возникают проблемы с моделированием этого в нем. Я хотел бы получить объяснения для достижения ответа вместо чистого кода для развития моего логического мышления.

Заранее спасибо.

Я также прочитал этот урок и попробовал это руководство по онтологии с чат-ботами.


Более подробные примеры

В игре четыре действия: неудача, удача, плохая игра, хорошая игра. Все действия могут произойти с одним из двух игроков. Например, оппонент бросает кубик с небольшим числом, запускает действие «противник неудачи», или игрок делает успешный ход, запускает действие «игрок с хорошей игрой». Предикат реакции должен возвращать реакцию смайлика игрока на них в игровых действиях.

?- reaction(bad, luck, opponent).
the_face_with_tears_of_joy_emoji;

?- reaction(good, play, player).
arm_flexing_emoji;

?- reaction(good, play, opponent).
angry_face_emoji;

1 Ответ

0 голосов
/ 20 мая 2019

Самый простой способ подойти к этому - просто составить таблицу реакций:

reaction(bad, luck, opponent, the_face_with_tears_of_joy_emoji).
reaction(good, play, player, arm_flexing_emoji).
reaction(good, play, opponent, angry_face_emoji).

Когда вы отправляете запрос, результатом является последний параметр:

?- reaction(good, play, player, Reaction).
Reaction = arm_flexing_emoji.

Возможно, у вас будут другие таблицы, чтобы рассказать вам другие факты о вашей ситуации:

roll_quality(1, bad).
roll_quality(2, bad).
roll_quality(3, bad).
roll_quality(4, good).
roll_quality(5, good).
roll_quality(6, good).

Тогда ваш запрос станет немного интереснее:

?- roll_quality(Roll, RollQuality), reaction(RollQuality, luck, player, Reaction).

Например.

...