Задачка про воробья, дятла и синицу. - Prolog

Узнай цену своей работы

Формулировка задачи:

1. Воробей, дятел и синица сидели на одной ветке. В каком порядке они сидели, если a. Синица сидела слева от дятла, а воробей слева от синицы b. Дятел сидел слева от синицы и справа от воробья c. Воробей сидел справа от синицы, а дятел справа от воробья. 2. Найти НОК (M, N), если НОК (M,N) = M*N/НОД(M,N)

Решение задачи: «Задачка про воробья, дятла и синицу.»

textual
Листинг программы
DOMAINS
 
PREDICATES
side(symbol,symbol, integer)
order(symbol,symbol,symbol, integer)
 
CLAUSES
side(sinica,dyatel,1).
side(vorobey,sinica,1).
side(dyatel,sinica,2).
side(vorobey,dyatel,2).
side(sinica,vorobey,3).
side(vorobey,dyatel,3).
order(X,Y,Z,N):- side(X,Y,N), side(Y,Z,N), X<>Y, Y<>Z.
order(X,Y,Z,N):- side(X,Y,N), side(X,Z,N), X<>Y, Y<>Z.
 
GOAL
order(X,Y,Z,N), write(N,": ",X," ",Y," ",Z), nl,
fail.

Объяснение кода листинга программы

  1. В данном коде используется язык программирования Prolog.
  2. Задача заключается в определении порядка следования воробья, дятла и синицы.
  3. Для решения задачи введен набор предикатов и утверждений.
  4. Предикат side(symbol,symbol, integer) используется для определения того, с какой стороны от другого символа находится символ.
  5. Утверждение side(sinica,dyatel,1) означает, что синица находится слева от дятла.
  6. Утверждение side(vorobey,sinica,1) означает, что воробей находится слева от синицы.
  7. Утверждение side(dyatel,sinica,2) означает, что дятел находится справа от синицы.
  8. Утверждение side(vorobey,dyatel,2) означает, что воробей находится справа от дятла.
  9. Утверждение side(sinica,vorobey,3) означает, что синица находится справа от воробья.
  10. Утверждение side(vorobey,dyatel,3) означает, что воробей находится справа от дятла.
  11. Предикат order(X,Y,Z,N) используется для определения порядка следования трех символов.
  12. Условие X<>Y, Y<>Z гарантирует, что символы не равны друг другу.
  13. Условие X<>Y, Y<>Z гарантирует, что символы не равны друг другу.
  14. Условие X<>Y, Y<>Z гарантирует, что символы не равны друг другу.
  15. Условие X<>Y, Y<>Z гарантирует, что символы не равны друг другу.
  16. В основной части программы находится цель order(X,Y,Z,N), которая вызывает предикат order с четырьмя аргументами.
  17. Далее следует вызов функции write(N,: ,X, ,Y, ,Z), которая выводит результат на экран.
  18. Затем вызывается функция nl, которая выводит символ новой строки.
  19. Вызов функции fail предназначен для обработки ошибок.
  20. В конце программы стоит точка fail, которая обозначает конец списка целей.

Оцени полезность:

11   голосов , оценка 3.818 из 5
Похожие ответы