length это не хвостовая рекурсия, т.к. последняя операция не вызов функции length, а сложение То же самое и про map: последняя операция это (:), а не вызов map.
@dushkin_will_explain2 жыл бұрын
Ну они всё равно похожи на хвостовую и могут вычисляться в постоянном объёме памяти же.
@kkambucha2 жыл бұрын
Спасибо! Интересно. А в clojure списки тоже с рекурсией?
@dushkin_will_explain2 жыл бұрын
Должны быть. Но я не знаю.
@kkambucha2 жыл бұрын
божечки, я в результате копаний с рекурсией пришел к теме эволюции и бифуркационных диаграмм :)
@dushkin_will_explain2 жыл бұрын
Это же очень круто! Поздравляю :) Обратите внимание на мои видео по биотехнологиям. Ну и генетические алгоритмы я тоже уже рассмотрел.
@MechanicalFreaks2 жыл бұрын
Мне казалось хвостовая рекурсия должна быть что-то вроде: ``` length a = go a 0 where go [] x = x go (_:as) x = go as (x+1) ```
@dushkin_will_explain2 жыл бұрын
Да, всё так. Это классический вариант - аккумулятор. В следующем своём видео я про это рассказываю.
@MechanicalFreaks2 жыл бұрын
@@dushkin_will_explain да, посмотрел) Конечно, как мне кажется, спорное решение подавать сначала нехвостовую рекурсию как хвостовую в видео про "хвостовую рекурсию", а после, в другом видео про аккумулятор, сделать оговорку на настоящесть
@dushkin_will_explain2 жыл бұрын
@@MechanicalFreaks, увы, это издержки производства.
@MechanicalFreaks2 жыл бұрын
@@dushkin_will_explain понятно, но всё равно - Вы молодец)
@dushkin_will_explain2 жыл бұрын
@@MechanicalFreaks, благодарю. Стараюсь просвещать наших людей в силу своих сил и способностей.
@alexanderskusnov51192 жыл бұрын
Для образца _ фраза "всё, что угодно" подходит и для образца х (переменная). Правильная фраза: "связывания с образцом (то бишь с переменной х) не происходит".
@dushkin_will_explain2 жыл бұрын
Да, точно. Там ещё значение _|_ по-разному обрабатывается, с очевидностью.
@alexanderskusnov51192 жыл бұрын
Ещё одна оптимизация это build-foldr в цепочке вычислений: там списки вообще не строятся.
@dushkin_will_explain2 жыл бұрын
Благодарю за важное дополнение.
@alexanderskusnov51192 жыл бұрын
Надо было добавить, что компилятор для оптимизации хвостовую рекурсию заменяет циклом (уже на языке C--)
@dushkin_will_explain2 жыл бұрын
Да, не всё помнишь во время записи.
@dushkin_will_explain2 жыл бұрын
Все видео по функциональному программированию в одном плейлисте: kzbin.info/www/bejne/mIGmc5Vnipppr9k И вы всегда можете обратиться к нам за консультациями.