Задача на совмещение имени и фамилии - Prolog
Формулировка задачи:
В кругу сидят Иванов, Петров, Марков и Карпов. Их имена: Андрей, Сергей, Тимофей и Алексей. Известно, что:
1) Иванов не Алексей и не Андрей;
2) Сергей сидит между Марковым и Тимофеем;
3) Карпов не Сергей и не Алексей;
4) Петров сидит между Карповым и Андреем. Назовите имя и фамилию каждого.
начал писать и возникли загвоздки(
Нашел что Иванов Сергей, Марков Андрей, Карпов Тимофей, Петров Алексей.
Решение задачи: «Задача на совмещение имени и фамилии»
textual
Листинг программы
domains person = p(integer, symbol, symbol) list = person* predicates member(person, list) near(integer, integer) go(list) clauses member(X, [X|_]). member(X, [_|T]) :- member(X, T). near(X, Y) :- X>Y, near(Y, X). near(1, 2). near(2, 3). near(3, 4). near(1, 4). go(L) :- % Инициируем список L = [p(1, "Иванов", _), p(2, _, _), p(3, _, _), p(4, _, _)], % Расставляем фамилии member(p(_, "Петров", _), L), member(p(_, "Марков", _), L), member(p(_, "Карпов", _), L), % Расставляем имена member(p(_, _, "Андрей"), L), member(p(_, _, "Сергей"), L), member(p(_, _, "Тимофей"), L), member(p(_, _, "Алексей"), L), % 1) Иванов не Алексей и не Андрей; member(p(_, "Иванов", X1), L), X1 <> "Алексей", X1 <> "Андрей", % 2) Сергей сидит между Марковым и Тимофеем; member(p(N11, "Марков", _), L), member(p(N12, _, "Сергей"), L), near(N11, N12), member(p(N13, _, "Тимофей"), L), N11 <> N13, near(N12, N13), % 3) Карпов не Сергей и не Алексей; member(p(_, "Карпов", X2), L), X2 <> "Сергей", X2 <> "Алексей", % 4) Петров сидит между Карповым и Андреем. member(p(N21, "Карпов", _), L), member(p(N22, "Петров", _), L), near(N21, N22), member(p(N23, _, "Андрей"), L), N21 <> N23, near(N22, N23).
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д