История изменений
Исправление
dave,
(текущая версия)
:
Для хвостовой рекурсии используется специальная форма recur, на самом деле вместо имени рекурсивной функции в теле этой функции нужно всего лишь написать recur и рекурсия развернётся в цикл
Прикольно. В интернете полно информации, а ложные представления все так же сильны.
Не любая хвостовая рекурсия развернется в цикл _целевого_ языка, не любая. Хвостовая рекурсия эквивалентна циклу определенной воображаемой машины (см. PAIP), но это совсем не то же самое, что цикл такого _целевого_ языка, как clojure.
Контр-пример: косвенная рекурсия, которая естественным образом возникает при использовании продолжений. Вот, фиг ее сможет записать кто на java, не то, что на clojure или scala. Тем менее, в рамках упомянутой воображаемой машины из PAIP там действительно будет нечто похожее на цикл во время исполнения.
Исправление
dave,
:
Для хвостовой рекурсии используется специальная форма recur, на самом деле вместо имени рекурсивной функции в теле этой функции нужно всего лишь написать recur и рекурсия развернётся в цикл
Прикольно. В интернете полно информации, а ложные представления все так же сильны.
Не любая хвостовая рекурсия развернется в цикл _целевого_ языка, не любая. Хвостовая рекурсия эквивалентна циклу определенной воображаемой машины (см. PAIP), но это совсем не то же самое, что цикл такого _целевого_ языка, как clojure.
Контр-пример: косвенная рекурсия, которая естественным образом возникает при использовании продолжений. Вот, фиг ее сможет записать кто на java, не то, что на clojure или scala. Тем менее, в рамках упомянутой вооброжаемой машины из PAIP там действительно будет нечто похожее на цикл во время исполнения.
Исходная версия
dave,
:
Для хвостовой рекурсии используется специальная форма recur, на самом деле вместо имени рекурсивной функции в теле этой функции нужно всего лишь написать recur и рекурсия развернётся в цикл
Прикольно. В интернете полно информации, а ложные представления все так же сильны.
Не любая хвостовая рекурсия развернется в цикл _целевого_ языка, не любая. Хвостовая рекурсия эквивалентна циклу определенной воображаемой машины (см. PAIP), но это совсем не то же самое, что цикл такого _целевого_ языка, как clojure.
Контр-пример: косвенная рекурсия, которая естественным образом возникает при использовании продолжении. Вот, фиг ее сможет записать кто на java, не то, что на clojure или scala. Тем менее, в рамках упомянутой вооброжаемой машины из PAIP там действительно будет нечто похожее на цикл во время исполнения.