Насколько ограничен повтор?

Насколько я могу судить, Clojure's recur поддерживается компилятором, тогда как в других lisps он реализован на более низком уровне.

Пока я читаю, это не будет "общая" стоимость владения. Помимо очевидного (нужно ключевое слово + проверка), это никак recur менее мощный?

2 ответа

Решение

recur поддерживает только хвостовую рекурсию, которая является подклассом общего TCO. Clojure также поддерживает взаимную или косвенную рекурсию через trampoline,

РЕДАКТИРОВАТЬ Кроме того, я думаю, что общая TCO должна была приземлиться в JVM с Java 7 и recur задумывался как временное решение. Затем произошел Oracle. Я смешал это с графиком Project Lambda (добавление замыканий в Java)

recur немного отличается от полной TCO тем, что recurработает как с циклами, так и с функциями и не выполняет некоторые функции, которые были бы при полной реализации TCO. Философская поддержка этого заключается в том, чтобы сделать особую часть особенной, а не просто оптимизировать единый синтаксис.

Другие вопросы по тегам