Prolog. Задачи на соответствие
Формулировка задачи:
Алиса в стране чудес. Загадка: Была украдена мука, ее нашли в домике, где жил Мартовский заяц, Болванщик и Соня. Мартовский заяц сказал: «Муку украл Болванщик». Болванщик и Соня дали показания, но они утеряны. В ходе заседания выяснилось, что укравший муку дал правдивые показания.
Решение задачи: «Prolog. Задачи на соответствие»
textual
Листинг программы
predicates imya(symbol) - nondeterm (o) nondeterm (i) ukradeno(symbol) - nondeterm (o)nondeterm (i) sootvetstvie(symbol,symbol) - nondeterm (i,i)nondeterm (i,o) reshenie(symbol,symbol,symbol,symbol,symbol,symbol) - nondeterm (i,i,i,i,i,i)nondeterm (o,o,o,o,o,o) clauses %baza dannih imen imya(martovskyi zayac). imya(bolvanshik). imya(sonya). %baza dannih ukradeno ukradeno(martovskim zaycem). ukradeno(bolvanshikom). ukradeno(sonyei). %opredelim odnoznachnoye sootvetstvie I - imya, U - ukradeno sootvetstvie(I,U):-imya(I), I=martovskyi zayac, ukradeno(U)
Объяснение кода листинга программы
В представленном коде на языке Prolog определены следующие сущности:
- Предлоги:
predicates- здесь определяются утверждения (предикаты)clauses- здесь определяются правила (клаузы)
- Переменные:
symbol- общий символ для всех переменныхi- для явного указания, что переменная является недейтерирующей (nondeterm)o- для явного указания, что переменная является дейтерирующей (determ)
- Утверждения (предикаты):
imya(symbol)- определение имени (дейтерирующее)ukradeno(symbol)- определение украденного (дейтерирующее)sootvetstvie(symbol,symbol)- определение соответствия (дейтерирующее)reshenie(symbol,symbol,symbol,symbol,symbol,symbol)- определение решения (дейтерирующее)
- Правила (клаузы):
%baza dannih imen- база данных имен (недейтерирующее утверждение)%baza dannih ukradeno- база данных украденных (недейтерирующее утверждение)%opredelim odnoznachnoye sootvetstviye I — imya, U — ukradeno- определение однозначного соответствия I - имя, U - украдено (недейтерирующее утверждение) В данном коде определены три базы данных:- База данных имен
- База данных украденных
- База данных соответствий
Правило
%opredelim odnoznachnoye sootvetstviye I — imya, U — ukradenoопределяет однозначное соответствие между именами и украденными. В данном случае, правило утверждает, что если объект имеет имяmartovskyi zayac, то он украденmartovskim zaycem. Аналогично для остальных соответствий. Важно отметить, что в данном коде нет явного начального утверждения или запроса. Для запуска этого кода необходимо добавить начальное утверждение или запрос, чтобы начать выполнение программы.