Ну, pyton команду reduce (lambda x, y: x*y, range(1, 100)) тоже выполняет мгновенно. И даже что-то вроде reduce(lambda x, y: x*y, map(lambda x: x**2, range(1, 10000))) занимает меньше четверти секунды. Но в хаскеле подобный код определенно смотрится проще и лаконичнее
Все видео по функциональному программированию в одном плейлисте: ruclips.net/video/bPCBb1U56yw/видео.html И вы всегда можете обратиться к нам за консультациями.
Есть и другие достойные языки: Delphi, MatLab. Или библиотека DirectX с обёрткой C++ для скоростной трёхмерной графики. Та же библиотека CUDA для параллельных расчётов на GPU.
Как раз всё наоборот: из-за лени foldr может сделать вычисления для бесконечного списка (напр., логическая сумма или произведение), а foldl всегда разойдётся.
@@dushkin_will_explain а я все равно не понял, если список бесконечный, какая разница с какого конца начинать? тот же length выраженный через foldr вдруг покажет длину бесконечного списка?
кажется понял, логическая сумма выходит из рекурсии после первой True, определена через foldMap, а foldMap через foldr, а foldr через foldMap... это какая то рекурсия рекурсий, бедный мозг болит)
Ну, pyton команду
reduce (lambda x, y: x*y, range(1, 100))
тоже выполняет мгновенно. И даже что-то вроде
reduce(lambda x, y: x*y, map(lambda x: x**2, range(1, 10000)))
занимает меньше четверти секунды.
Но в хаскеле подобный код определенно смотрится проще и лаконичнее
Благодарю за наглядные пояснения.
Все видео по функциональному программированию в одном плейлисте: ruclips.net/video/bPCBb1U56yw/видео.html
И вы всегда можете обратиться к нам за консультациями.
И, кроме того, вы всегда можете написать мне в ТГ: @rdushkin
Хаскель лучший... но не для всех... но лучший! :-)
Воистину!
Есть и другие достойные языки: Delphi, MatLab. Или библиотека DirectX с обёрткой C++ для скоростной трёхмерной графики. Та же библиотека CUDA для параллельных расчётов на GPU.
Как раз всё наоборот: из-за лени foldr может сделать вычисления для бесконечного списка (напр., логическая сумма или произведение), а foldl всегда разойдётся.
А я что сказал?
@@dushkin_will_explain а я все равно не понял, если список бесконечный, какая разница с какого конца начинать? тот же length выраженный через foldr вдруг покажет длину бесконечного списка?
кажется понял, логическая сумма выходит из рекурсии после первой True, определена через foldMap, а foldMap через foldr, а foldr через foldMap... это какая то рекурсия рекурсий, бедный мозг болит)
@@ssh15, length = sum . map (\_ -> 1)