Задачка про сбор урожая - Prolog
Формулировка задачи:
Саша, Юля и Оксана помогали собирать урожай - малину, смородину и клубнику. Каждый из них собирал что-то одно. Кто что собирал, если известно, что больше всего было собрано клубники, Саша не собирал смородину, а Саша и Юля вдвоем набрали ягод меньше, чем Оксана?
на листочке то я решил,
Миша-вишню
Коля-крыжовник
Дима-смородину
а вот как это в прологе реализовать?
Решение задачи: «Задачка про сбор урожая»
textual
Листинг программы
domains list = symbol* predicates select(symbol, list, list) clauses select(H, [H|T], T). select(X, [H|T1], [H|T2]) :- select(X, T1, T2). goal L1 = ["малину", "смородину", "клубнику"], select(Sasha, L1, L2), select(Yula, L2, L3), select(Oksana, L3, _), Oksana = "клубнику", not(Sasha = "смородину"), write("Саша собирала ", Sasha), nl, write("Юля собирала ", Yula), nl, write("Оксана собирала ", Oksana), nl.
Объяснение кода листинга программы
- Задана структура списка, он может содержать символы.
- Задана структура предиката select, который принимает три аргумента: символ, список, список.
- Задано правило для предиката select, которое позволяет обрабатывать список, состоящий из одного элемента.
- Задано правило для предиката select, которое позволяет обрабатывать список, состоящий из двух элементов.
- Задана цель, которую нужно достичь.
- Заданы значения переменных:
Sasha =
малина
Yula =смородина
* Oksana =клубника
- Задано условие, которое говорит, что Sasha не должна быть равна
смородина
. - Задано выражение для вывода на экран информации о сборе урожая.
- Выполняется сбор урожая: Саша собирает малину. Юля собирает смородину. * Оксана собирает клубнику.
- Выводится на экран информация о сборе урожая.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д