Найти максимальный элемент в списке, который состоит из списков - Prolog
Формулировка задачи:
Привет. Не могу разобраться, почему не проход по списку списков возвращается true, вместо значений, которые мне нужны.
Структура FILTERED_SETS имеет следующий вид:
[[кровать, сосна, 0.77],[табурет, береза, 0.56],[стол, ель, 0.80]]
В конечно итоге, программа должна возвращать TREE, THING и RATIO, но вместо этого прилетают несколько true,
а потом происходит ERROR: Arguments are not sufficiently instantiated
Решение задачи: «Найти максимальный элемент в списке, который состоит из списков»
textual
Листинг программы
max_fs(MaxFS) :- FILTERED_SETS = [[кровать, сосна, 0.77],[табурет, береза, 0.56],[стол, ель, 0.80]], max_fs(FILTERED_SETS, MaxFS). max_fs([Head | Teil], MaxFS) :- max_fs(Teil, Head, MaxFS). max_fs([], MaxFS, MaxFS). max_fs([[_, _, RATIO2] | Teil], [TREE1, THING1, RATIO1], MaxFS) :- RATIO2 < RATIO1, max_fs(Teil, [TREE1, THING1, RATIO1], MaxFS). max_fs([[TREE2, THING2, RATIO2] | Teil], [_, _, RATIO1], MaxFS) :- RATIO2 >= RATIO1, max_fs(Teil, [TREE2, THING2, RATIO2], MaxFS).
Объяснение кода листинга программы
- В первой строке кода объявлена цель (т.е. то, что мы хотим получить) под названием MaxFS.
- Затем объявлен список, который мы будем фильтровать, под названием FILTERED_SETS. Он содержит три элемента: кровать, сосна, 0.77; табурет, береза, 0.56; стол, ель, 0.80.
- Мы начинаем с первого элемента списка (голова списка) и передаем его в качестве первого аргумента в функцию max_fs вместе с пустым списком в качестве второго аргумента и значением MaxFS.
- Если список пуст, мы просто возвращаем значение MaxFS.
- Если список не пуст, мы продолжаем рекурсивно вызывать функцию max_fs, передавая в нее следующий элемент списка (теперь голову списка), предыдущий элемент списка (теперь хвост списка) и текущее значение MaxFS.
- Если текущий элемент списка имеет более высокое соотношение, чем предыдущий элемент списка, мы заменяем предыдущий элемент списка на текущий элемент списка и продолжаем рекурсивно вызывать функцию max_fs.
- Если текущий элемент списка имеет более высокое или равное соотношение, чем предыдущий элемент списка, мы просто возвращаем значение MaxFS.
- В конце концов, мы получим максимальное значение из списка с максимальным соотношением.
- Значение MaxFS будет содержать максимальное значение из списка.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д