Задача на совмещение имени и фамилии - Prolog

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

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

В кругу сидят Иванов, Петров, Марков и Карпов. Их имена: Андрей, Сергей, Тимофей и Алексей. Известно, что: 1) Иванов не Алексей и не Андрей; 2) Сергей сидит между Марковым и Тимофеем; 3) Карпов не Сергей и не Алексей; 4) Петров сидит между Карповым и Андреем. Назовите имя и фамилию каждого. начал писать и возникли загвоздки(
Листинг программы
  1. PREDICATES
  2. name(symbol)
  3. sename(symbol)
  4. CLAUSES
  5. name(Andrey).name(Sergey).name(Timofry).name(Alex).
  6. sename(Ivanov).sename(Petrov).sename(Markov).sename(Karpov).
  7. sename(Ivanov):-name(X), x=not(Alex),not(Andrey).
  8. sename(Karpov):-name(y), y=not(Sergey),not(Alex).
Нашел что Иванов Сергей, Марков Андрей, Карпов Тимофей, Петров Алексей.

Решение задачи: «Задача на совмещение имени и фамилии»

textual
Листинг программы
  1. domains
  2. person = p(integer, symbol, symbol)
  3. list = person*
  4.  
  5. predicates
  6. member(person, list)
  7. near(integer, integer)
  8. go(list)
  9.  
  10. clauses
  11. member(X, [X|_]).
  12. member(X, [_|T]) :- member(X, T).
  13.  
  14. near(X, Y) :- X>Y, near(Y, X).
  15. near(1, 2).
  16. near(2, 3).
  17. near(3, 4).
  18. near(1, 4).
  19.  
  20. go(L) :-
  21.     % Инициируем список
  22.     L = [p(1, "Иванов", _), p(2, _, _), p(3, _, _), p(4, _, _)],
  23.  
  24.     % Расставляем фамилии
  25.     member(p(_, "Петров", _), L),
  26.     member(p(_, "Марков", _), L),
  27.     member(p(_, "Карпов", _), L),
  28.  
  29.     % Расставляем имена
  30.     member(p(_, _, "Андрей"), L),
  31.     member(p(_, _, "Сергей"), L),
  32.     member(p(_, _, "Тимофей"), L),
  33.     member(p(_, _, "Алексей"), L),
  34.    
  35.     % 1) Иванов не Алексей и не Андрей;
  36.     member(p(_, "Иванов", X1), L),
  37.     X1 <> "Алексей",
  38.     X1 <> "Андрей",
  39.    
  40.     % 2) Сергей сидит между Марковым и Тимофеем;
  41.     member(p(N11, "Марков", _), L),
  42.     member(p(N12, _, "Сергей"), L),
  43.     near(N11, N12),
  44.     member(p(N13, _, "Тимофей"), L),
  45.     N11 <> N13,
  46.     near(N12, N13),
  47.    
  48.     % 3) Карпов не Сергей и не Алексей;
  49.     member(p(_, "Карпов", X2), L),
  50.     X2 <> "Сергей",
  51.     X2 <> "Алексей",
  52.    
  53.     % 4) Петров сидит между Карповым и Андреем.
  54.     member(p(N21, "Карпов", _), L),
  55.     member(p(N22, "Петров", _), L),
  56.     near(N21, N22),
  57.     member(p(N23, _, "Андрей"), L),
  58.     N21 <> N23,
  59.     near(N22, N23).

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


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

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

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

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут