Найти максимальный элемент в списке, который состоит из списков - 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).

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

  1. В первой строке кода объявлена цель (т.е. то, что мы хотим получить) под названием MaxFS.
  2. Затем объявлен список, который мы будем фильтровать, под названием FILTERED_SETS. Он содержит три элемента: кровать, сосна, 0.77; табурет, береза, 0.56; стол, ель, 0.80.
  3. Мы начинаем с первого элемента списка (голова списка) и передаем его в качестве первого аргумента в функцию max_fs вместе с пустым списком в качестве второго аргумента и значением MaxFS.
  4. Если список пуст, мы просто возвращаем значение MaxFS.
  5. Если список не пуст, мы продолжаем рекурсивно вызывать функцию max_fs, передавая в нее следующий элемент списка (теперь голову списка), предыдущий элемент списка (теперь хвост списка) и текущее значение MaxFS.
  6. Если текущий элемент списка имеет более высокое соотношение, чем предыдущий элемент списка, мы заменяем предыдущий элемент списка на текущий элемент списка и продолжаем рекурсивно вызывать функцию max_fs.
  7. Если текущий элемент списка имеет более высокое или равное соотношение, чем предыдущий элемент списка, мы просто возвращаем значение MaxFS.
  8. В конце концов, мы получим максимальное значение из списка с максимальным соотношением.
  9. Значение MaxFS будет содержать максимальное значение из списка.

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


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

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

7   голосов , оценка 4.143 из 5
Похожие ответы