Задачка про воробья, дятла и синицу. - 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.
Объяснение кода листинга программы
- В данном коде используется язык программирования Prolog.
- Задача заключается в определении порядка следования воробья, дятла и синицы.
- Для решения задачи введен набор предикатов и утверждений.
- Предикат
side(symbol,symbol, integer)
используется для определения того, с какой стороны от другого символа находится символ. - Утверждение
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)
используется для определения порядка следования трех символов. - Условие
X<>Y, Y<>Z
гарантирует, что символы не равны друг другу. - Условие
X<>Y, Y<>Z
гарантирует, что символы не равны друг другу. - Условие
X<>Y, Y<>Z
гарантирует, что символы не равны друг другу. - Условие
X<>Y, Y<>Z
гарантирует, что символы не равны друг другу. - В основной части программы находится цель
order(X,Y,Z,N)
, которая вызывает предикатorder
с четырьмя аргументами. - Далее следует вызов функции
write(N,
:,X,
,Y,
,Z)
, которая выводит результат на экран. - Затем вызывается функция
nl
, которая выводит символ новой строки. - Вызов функции
fail
предназначен для обработки ошибок. - В конце программы стоит точка
fail
, которая обозначает конец списка целей.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д