Prolog: Факты

Одно из основных понятий в языке Prolog – факты. Факты описываются логическими предикатами с конкретными значениями. В базах знаний на языке Prolog факты представляют конкретные сведения (знания).

male('Максим').
female('Маша').

В примере выше мы определили простейшие факты:

  • male – мужчина с конкретным значением Максим
  • female – женщина с конкретным значением Маша

Важно: аргументы в фактах и правилах должны начинаться с маленькой буквы, иначе интерпретатор Prolog будет воспринимать их, как переменные. Если аргументы начинаются с большой буквы, то они должны быть заключены в кавычки.

Заголовки фактов могут повторяться:

male('Максим').
male('Дмитрий').
female('Маша').

В данном примере мы определили несколько фактов:

  • male – мужчина с конкретным значением Максим
  • male – мужчина с конкретным значением Дмитрий
  • female – женщина с конкретным значением Маша

Факты могут включать несколько конкретных значений:

parent('Максим', 'Дмитрий').
parent('Маша', 'Дмитрий').

В этом примере определены факты о родителях и детях. Семантический смысл данных фактов может быть разным:

  • Если первое значение – родитель, то определены следующие факты:
    • Максим – родитель Дмитрия
    • Маша – родитель Дмитрия
  • Если первое значение – ребенок, то определены следующие факты:
    • Максим – ребенок Дмитрия
    • Маша – ребенок Дмитрия

Задание

Определите факты:

  • pet, как имя питомца
  • father, как отношение отец – сын
  • mother, как отношение мать – дочь

Полезное

Как с вами связаться? 🙃

Команда проекта находится в телеграм-сообществе по ссылке https://ttttt.me/HexletLearningBot. Там можно задать любой вопрос и повлиять на проект

Упражнение не проходит проверку — что делать? 😶

Если вы зашли в тупик, то самое время поговорить с нашим асситентом Тота во вкладке "ИИ-помощник". Как правильно задать вопрос:

В моей среде код работает, а здесь нет 🤨

Тесты устроены таким образом, что они проверяют решение разными способами и на разных данных. Часто решение работает с одними входными данными, но не работает с другими. Чтобы разобраться с этим моментом, изучите вкладку «Тесты» и внимательно посмотрите на вывод ошибок, в котором есть подсказки.

Мой код отличается от решения учителя 🤔

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

Прочитал урок — ничего не понятно 🙄

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

Нашли ошибку? Есть что добавить? Пулреквесты приветствуются

Привет! Я Тота и моя задача помочь в обучении. Чтобы активировать меня, нужно зарегистрироваться или залогиниться, если у вас уже есть аккаунт

Loading...

Ваше упражнение проверяется по этим тестам

1:- style_check(-singleton).
2:- dynamic error_happened/1.
3
4:- assertz(error_happened('OK')).
5
6user:message_hook(Term, error, _Lines) :-
7	retract(error_happened('OK')),
8    assertz(error_happened(error)),
9    fail.
10
11:- [main].
12
13:- begin_tests(facts).
14
15test(010, [true, nondet]) :-
16    pet(P),
17    father(F, S),
18    mother(M, D),
19    error_happened(X).
20
21:- end_tests(facts).
22

Решение учителя откроется через:

20:00
waiting_clock