Задача на совмещение имени и фамилии - 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).

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

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

12   голосов , оценка 3.833 из 5