Схема - найти наиболее глубокие значения вложенных списков - PullRequest
1 голос
/ 05 декабря 2011

Я спрашивал несколько дней назад о том, чтобы найти наиболее глубоко вложенные списки .Я реализовал идею, которая была дана, и она работает.

Но есть еще одна проблема: мне также нужно создать список из вложенного списка.значение: если я изменю (8) и (10 11 12) на leaf1 и leaf2, мне нужно вернуть: '(ans (leaf1 (8)) (leaf2 (10 11 12))./ ans - это кавычка

Другими словами: моя функция получит (1 (2 3) (4 (5) (7 (8) (10 11 12)))))) => большинство вложенных списков (8) и (10 11 12) => моя функция вернет '(ans (leaf1 (8)) (leaf2 (10 11 12)).

Я пытаюсь найти идею, не реализация .Благодаря.

1 Ответ

1 голос
/ 07 декабря 2011

Да, это легко сделать. В настоящее время (если я правильно понимаю) у вас есть рекурсивная функция, которая спускается по дереву и использует cons для создания модифицированной копии (в которой самые глубоко вложенные списки заменяются чем-то). Это общий шаблон для рекурсивных функций дерева, но нет причин, по которым они должны возвращать значение с такой же структурой, что и входные данные, на которых они повторяются. Например, вы можете написать функцию для обхода дерева чисел и возврата их суммы.

В этом случае кажется, что вы, вероятно, хотите сохранить базовую структуру своей рекурсивной функции дерева, но используйте cons или, возможно, append, чтобы построить плоский список наиболее глубоко -nested-списки, которые вы нашли.

Я не могу точно сказать по вашему вопросу, но вы также можете искать способ написать функцию, которая возвращает два отдельных значения: одно из них - дерево с глубоко вложенными списками, замененными на что-то еще, а другой - плоский список самих замененных битов. В этом случае вы можете захотеть взглянуть на процедуры Схемы values и call-with-values и, возможно, на библиотечную форму let-values, если она есть в вашей Схеме. См. Schemewiki FAQ здесь для получения дополнительной информации (прокрутите вниз).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...