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