Size: a a a

2021 February 19

к

кана in Haskell Start
можно еще так написать, чтобы убрать лишний fmap

fib :: Int -> Integer
fib = \i -> cache !! i where
 cache = [ case x of { 0 -> 1; 1 -> 1; n -> cache !! (n - 2) + cache !! (n - 1) } | x <- [0..] ]

тогда cache становится явнорекурсивным
источник

D

Dmitry in Haskell Start
кана
да, я соврал, cache все таки рекурсивен, просто через fmap

fib :: Int -> Integer
fib = \i -> cache !! i
 where
   cache = fmap
     (\x -> case x of { 0 -> 1; 1 -> 1; n -> cache !! (n - 2) + cache !! (n - 1) })
     [0..]

если вот так написать то видно
слушай, а можешь в одну строчку написать вот этот вариант
источник

к

кана in Haskell Start
могу, но зачем)

fib :: Int -> Integer
fib = (cache !!) where cache = fmap (\x -> case x of { 0 -> 1; 1 -> 1; n -> cache !! (n - 2) + cache !! (n - 1) }) [0..]
источник

D

Dmitry in Haskell Start
не, я имел ввиду без where
источник

к

кана in Haskell Start
а без where нельзя, нужна какая-то переменная для рекурсии, или fix
источник

D

Dmitry in Haskell Start
о - вот и подошли ещё раз
а то у меня всегда было такое впечатление что where для того чтобы внутренние функции делать, чтобы их снаружи не видели
источник

к

кана in Haskell Start
cache внутри своего определения использует cache, тут рекурсия
источник

D

Dmitry in Haskell Start
спасибо большое за объяснение - буду осмыслять)
источник

к

кана in Haskell Start
{-# LANGUAGE LambdaCase #-}

fib :: Int -> Integer
fib = (fix (\cache -> fmap (\case {0->1; 1->1; n->cache!!(n-1)+cache!!(n-2)}) [0..]) !!)

вот однострочник без where через fix
источник

D

Dreamerinnoise in Haskell Start
источник

D

Dmitry in Haskell Start
о, кстати, а что ето?
> {-# LANGUAGE LambdaCase #-}
источник

к

кана in Haskell Start
прагма, которая включает экстеншен LambdaCase
источник

D

Dmitry in Haskell Start
я просто видел это расширение, но не знаю что оно делает
источник

D

Dmitry in Haskell Start
что это за лямда-кейс такой?
источник

к

кана in Haskell Start
источник

к

кана in Haskell Start
\case { a -> b; c -> d }
это
\x -> case x of { a -> b; c -> d }
источник

D

Dmitry in Haskell Start
клёво
источник

D

Dmitry in Haskell Start
пасиба!
источник
2021 February 20

:

: in Haskell Start
omg haskell is very hard
источник

D

Dmitry in Haskell Start
кана
если знаком другой язык какой-нибудь, то я могу показать похожий такой же ленивый код на другом языке
Извини за назойливость, но не мог бы ты показать ленивое и не ленивое иммутабельное кэширование на JS.

Ключ поиска:
lazy memoize js
источник