Логическое программирование в ограничениях - Prolog

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

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

Всем доброго времени суток! Прошу помощи) Люди добрые, кто понимает SWI Prolog, не могли бы вы прокомментировать код? Очень нужно разобраться. Я не во всех местах понимаю, что происходит И не подскажете как правильно написать запрос? что-то у меня не хочет работать Прога вот этой задачи: На одной улице стоят 4 дома. В каждом из них живет один из 4-х людей: Семен, Николай, Артур и Роман. Каждый из них владеет профессией: Врач, Художник, Егерь, Тренер. Определить кто в каком доме живет и кто какой профессией владеет. Известно, что: Художник живет рядом с тренером Врач живет рядом с Художником Егерь левее врача Тренер не рядом с Егерем Художник правее Семена Роман не тренер Семен рядом с Николаем Артур не рядом с Романом
Листинг программы
  1. houses([ house(first, _, _ ), house(second, _, _ ), house(third, _, _ ), house(forth, _, _ ) ]).
  2. left_of(A, B, [A, B | _]).
  3. left_of(A, B, [_ | Y]) :- left_of(A, B, Y).
  4. right_of(A, B, [B, A | _]).
  5. right_of(A, B, [_ | Y]) :- right_of(A, B, Y).
  6. next_to(A, B, [A, B | _]).
  7. next_to(A, B, [B, A | _]).
  8. next_to(A, B, [_ | Y]) :- next_to(A, B, Y).
  9. mymember(X, [X|_]).
  10. mymember(X, [_|Y]) :- mymember(X, Y).
  11. not_in(_,[]).
  12. not_in(X,[X|_]):-!,fail.
  13. not_in(X,[_|A]):-not_in(X,A).
  14. not_trainer(H):-mymember(house(_,roman,hunter),H).
  15. not_trainer(H):-mymember(house(_,roman,doctor),H).
  16. not_trainer(H):-mymember(house(_,roman,painter),H).
  17. not_trainer(H):-mymember(house(_,roman,trainer),H),!,fail.
  18. print_houses([]).
  19. print_houses([A|B]) :- write(A), nl, print_houses(B).
  20. false(X):-X,!,fail. false(_).
  21. solve(H):-houses(H), next_to(house(_,_,painter), house(_,_,trainer),H),
  22. next_to(house(_,_,doctor), house(_,_,painter),H),
  23. left_of(house(_,_,hunter), house(_,_,doctor),H),
  24. false(next_to(house(_,_,trainer), house(_,_,hunter),H)),
  25. right_of(house(_,_,painter), house(_,semen,_),H),
  26. next_to(house(_,semen,_), house(_,nikolay,_),H),
  27. false(next_to(house(_,artur,_), house(_,roman,_),H )),
  28. not_trainer(H), mymember(house(_,roman,_), H),
  29. mymember(house(_,artur,_), H), mymember(house(_,semen,_), H),
  30. mymember(house(_,nikolay,_), H), print_houses(H). :-solve(_).

Решение задачи: «Логическое программирование в ограничениях»

textual
Листинг программы
  1. ?- man_prof(MP).
  2. MP = ['Роман'-'Егерь', 'Семен'-'Врач', 'Николай'-'Художник', 'Артур'-'Тренер'] ;
  3. false.

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


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

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

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

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

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

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