Насколько ограничен повтор?
Насколько я могу судить, Clojure's recur
поддерживается компилятором, тогда как в других lisps он реализован на более низком уровне.
Пока я читаю, это не будет "общая" стоимость владения. Помимо очевидного (нужно ключевое слово + проверка), это никак recur
менее мощный?
2 ответа
recur
поддерживает только хвостовую рекурсию, которая является подклассом общего TCO. Clojure также поддерживает взаимную или косвенную рекурсию через trampoline
,
РЕДАКТИРОВАТЬ Кроме того, я думаю, что общая TCO должна была приземлиться в JVM с Java 7 и recur
задумывался как временное решение. Затем произошел Oracle. Я смешал это с графиком Project Lambda (добавление замыканий в Java)
recur немного отличается от полной TCO тем, что recur
работает как с циклами, так и с функциями и не выполняет некоторые функции, которые были бы при полной реализации TCO. Философская поддержка этого заключается в том, чтобы сделать особую часть особенной, а не просто оптимизировать единый синтаксис.