Задача на совмещение имени и фамилии - Prolog
Формулировка задачи:
В кругу сидят Иванов, Петров, Марков и Карпов. Их имена: Андрей, Сергей, Тимофей и Алексей. Известно, что:
1) Иванов не Алексей и не Андрей;
2) Сергей сидит между Марковым и Тимофеем;
3) Карпов не Сергей и не Алексей;
4) Петров сидит между Карповым и Андреем. Назовите имя и фамилию каждого.
начал писать и возникли загвоздки(
Нашел что Иванов Сергей, Марков Андрей, Карпов Тимофей, Петров Алексей.
Листинг программы
- PREDICATES
- name(symbol)
- sename(symbol)
- CLAUSES
- name(Andrey).name(Sergey).name(Timofry).name(Alex).
- sename(Ivanov).sename(Petrov).sename(Markov).sename(Karpov).
- sename(Ivanov):-name(X), x=not(Alex),not(Andrey).
- sename(Karpov):-name(y), y=not(Sergey),not(Alex).
Решение задачи: «Задача на совмещение имени и фамилии»
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).
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д