Чтобы продемонстрировать эффективность рекурсии хвоста, я хотел бы получить динамический доступ к глубине стека вызовов в Схеме.Доступ к глубине стека вызовов в схеме
Есть ли способ сделать это? Если нет, есть ли способ сделать это на других основных функциональных языках (OCaml, Haskell и т. Д.)?
Очень приятно. Благодарю. –
Строго говоря, это не фактический «стек вызовов» из-за необходимости оптимизации хвостового вызова Схемы и преобразования CPS. Вместо этого это показывает глубину вложенности вызовов, применяя вызовы, которые должны быть обернуты в pre/post code. Я не уверен на 100%, как это реализовано, но есть большая вероятность, что такой код предотвратит компиляцию хвостового рекурсивного кода как итеративного (потому что он заставляет оценку возвращаться и восстанавливать счетчик глубины вызова после вся работа выполнена). – sjamaan
Что означает «принудительное исполнение» в этом контексте? – soegaard