Поиск по списку структур, задача - Prolog

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

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

Все доброго времени суток. Задача: Есть структура мальчик, которая выглядит так
Листинг программы
  1. имя,пирог = symbol
  2. мальчик=человек(имя, пирог)
Пирог принимает значение ест\не_ест. То есть определяем, ест ли мальчик пирог. Есть три мальчика и каждый из них может есть, а может и не есть пирог. Нужно написать предикат, который будет подсчитывать количество нужных структур. Сейчас код ищет только одно вхождение. Нужно как то это исправить. Очень буду благодарен за помощь.
Листинг программы
  1. DOMAINS
  2. int = integer
  3. имя,пирог = symbol
  4. мальчик=человек(имя, пирог)
  5. список2 = мальчик*
  6. съели = пирог*
  7. PREDICATES
  8. nondeterm count_member(список2,мальчик,int,int)
  9. nondeterm ищем_решение(список2)
  10. nondeterm возможное_имя(имя)
  11. nondeterm один_из(пирог,съели)
  12. nondeterm едят(съели)
  13. CLAUSES
  14. %поиск по списку элемента
  15. count_member([],_,M,M):-!.
  16. count_member([H|T],N,K,M):-H=N,K1=K+1,!,count_member(T,N,K1,M).
  17. count_member([_|T],N,K,M):-count_member(T,N,K,M).
  18. один_из(Name,[Name | _]).
  19. один_из(Name,[_|Хвост]):-один_из(Name,Хвост).
  20. едят(Пирог):-Пирог = [ест, не_ест].
  21. возможное_имя(ваня).
  22. возможное_имя(володя).
  23. возможное_имя(миша).
  24. ищем_решение(Мальчики):- возможное_имя(Имя1),возможное_имя(Имя2),возможное_имя(Имя3),
  25. not(Имя1=Имя2),
  26. not(Имя1=Имя3),
  27. not(Имя3=Имя2),
  28. едят(Пироги),
  29. один_из(Пирог1,Пироги),
  30. один_из(Пирог2,Пироги),
  31. один_из(Пирог3,Пироги),
  32. Мальчики=[человек(Имя1, Пирог1),человек(Имя2, Пирог2),человек(Имя3, Пирог3)],
  33. %подсчет сколько мальчиков едят пирог
  34. count_member(Мальчики,человек(_,ест),0,Количество), write("Кол= ", Количество).
  35. GOAL
  36. ищем_решение(Мальчики).
Результат сейчас: Кол= 1Мальчики=[человек("ваня","ест"),человек("володя","ест"),человек("миша","ест")] А должно быть: Кол= 3Мальчики=[человек("ваня","ест"),человек("володя","ест"),человек("миша","ест")]

Решение задачи: «Поиск по списку структур, задача»

textual
Листинг программы
  1. count_member(Мальчики,человек(_,ест),0,Количество),

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

  1. Задана структура данных человек(_,ест) и список структур данных Мальчики.
  2. Переменная Количество инициализирована нулем.
  3. Функция count_member вызывается с аргументами Мальчики, человек(_,ест), 0 и Количество.
  4. Функция count_member выполняет поиск структур данных человек(_,ест) в списке структур данных Мальчики.
  5. При каждом обнаружении структуры данных человек(_,ест) в списке структур данных Мальчики, функция увеличивает значение переменной Количество на единицу.
  6. После завершения поиска, функция возвращает значение переменной Количество.

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


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

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

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

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

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

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