Управление поиском решений в программе - Prolog

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

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

Задача: В симфонический оркестр приняли на работу трёх музыкантов: Брауна, Смита и Вессона, умеющих играть на скрипке, флейте, альте, кларнете, гобое и трубе. Известно, что: Смит самый высокий; играющий на скрипке меньше ростом играющего на флейте; играющие на скрипке и флейте и Браун любят пиццу; когда между альтистом и трубачом возникает ссора, Смит мирит их; Браун не умеет играть ни на трубе, ни на гобое. На каких инструментах играет каждый из музыкантов, если каждый владеет двумя инструментами? Ребят, если у вас нету готового решения или это сложнорешаемая задача, то, пожалуйста, объясните хотя бы, причем тут рост, любимая еда и взаимоотношения между музыкантами? Это ж логическое программирование, где здесь логика?

Решение задачи: «Управление поиском решений в программе»

textual
Листинг программы
  1. domains
  2. instr_name=string
  3. name_ig=string
  4. name,instr1,instr2,name_instr=string
  5. predicates
  6. igrok(name,instr1,instr2)
  7. instr(instr_name)
  8. instr1(name_instr)
  9. instr2(name_instr)
  10. name(name_ig)
  11. clauses
  12. instr1(skripka).
  13. instr1(fleyta).
  14. instr1(alta).
  15. instr1(klarnet).
  16. instr1(goboy).
  17. instr1(truba).
  18. instr2(skripka).
  19. instr2(fleyta).
  20. instr2(alta).
  21. instr2(klarnet).
  22. instr2(goboy).
  23. instr2(truba).
  24. name(smit).
  25. name(braun).
  26. name(vasson).
  27. igrok(Z,X,Y):-name(Z),instr1(X),instr2(Y).
  28. igrok(braun,X,Y):-not(igrok(braun,skripka,Y)).
  29. goal
  30. igrok(name,instr1,instr2).

Объяснение кода листинга программы

  1. Задана база данных, включающая следующие факты:
    • instr1(skripka)
    • instr1(fleyta)
    • instr1(alta)
    • instr1(klarnet)
    • instr1(goboy)
    • instr1(truba)
    • instr2(skripka)
    • instr2(fleyta)
    • instr2(alta)
    • instr2(klarnet)
    • instr2(goboy)
    • instr2(truba)
    • name(smit)
    • name(braun)
    • name(vasson)
  2. Задана цель - найти решение для igrok(name,instr1,instr2).
  3. Переменные:
    • name - не пустая строка
    • instr1 - не пустая строка
    • instr2 - не пустая строка
  4. В коде определены следующие предикаты:
    • igrok(name,instr1,instr2) - предикат, который имеет решение, если существует такое имя, которое играет на инструменте 1 и инструменте 2
    • instr(instr_name) - предикат, который истинен, если в базе данных есть факт, в котором имя инструмента равно instr_name
    • instr1(name_instr) - предикат, который истинен, если в базе данных есть факт, в котором имя инструмента 1 равно name_instr
    • instr2(name_instr) - предикат, который истинен, если в базе данных есть факт, в котором имя инструмента 2 равно name_instr
    • name(name_ig) - предикат, который истинен, если в базе данных есть факт, в котором имя равно name_ig
  5. В коде определены следующие клаузы:
    • instr1(skripka)
    • instr1(fleyta)
    • instr1(alta)
    • instr1(klarnet)
    • instr1(goboy)
    • instr1(truba)
    • instr2(skripka)
    • instr2(fleyta)
    • instr2(alta)
    • instr2(klarnet)
    • instr2(goboy)
    • instr2(truba)
    • name(smit)
    • name(braun)
    • name(vasson)
  6. Для решения задачи используется метод поиска в глубину (DFS), который реализуется с помощью правил вывода в системе Prolog.
  7. Для поиска решения используется следующая логика:
    • Если существует решение для igrok(name,instr1,instr2), то оно будет найдено.
    • Если не существует решения для igrok(name,instr1,instr2), то будет проверено, существует ли решение для igrok(braun,X,Y).
    • Если решение для igrok(braun,X,Y) существует, то оно будет найдено.
  8. В результате выполнения кода будет найдено решение для igrok(braun,X,Y), где X и Y - это имена инструментов, которые играют на инструменте skripka и fleyta соответственно.

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


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

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

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

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

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

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