Size: a a a

2021 March 02

к

кана in Haskell
ну тогда понятно откуда редурант, я четко уверен, что он просто аргументы анализирует в корке. Какие-нибудь не используются - редурант констрейнт
источник

G

GNU/Vsevolod in Haskell
let loop = (`mod` a) . (* b)
in  iterate' loop 1 !! foo
Почему если использовать не стрикт версию iterate, то память не очищается, а хранится весь список?
upd: изменил код
источник

G

GNU/Vsevolod in Haskell
След. значение ведь зависит только от последнего в списке.
источник

JS

Jerzy Syrowiecki in Haskell
GNU/Vsevolod
let loop = (`mod` a) . (* b)
in  iterate' loop 1 !! foo
Почему если использовать не стрикт версию iterate, то память не очищается, а хранится весь список?
upd: изменил код
почему вы считаете, что хранится весь список? и какой список?
источник

G

GNU/Vsevolod in Haskell
Jerzy Syrowiecki
почему вы считаете, что хранится весь список? и какой список?
Я код не тот пастнул, считаю, потому что при больших foo память забивается
Если использовать iterate', то при том же foo память не растет
источник

G

GNU/Vsevolod in Haskell
Список, что выдает iterate
источник

JS

Jerzy Syrowiecki in Haskell
GNU/Vsevolod
Я код не тот пастнул, считаю, потому что при больших foo память забивается
Если использовать iterate', то при том же foo память не растет
она не списком забивается
источник

JS

Jerzy Syrowiecki in Haskell
строгий iterate' строго вычисляет элементы
источник

JS

Jerzy Syrowiecki in Haskell
в обоих случаях все промежуточные элементы отбрасываются
источник

JS

Jerzy Syrowiecki in Haskell
но нестрогий строит цепочку задумок
источник

JS

Jerzy Syrowiecki in Haskell
это не тот список, о котором вы подумали
источник

к

кана in Haskell
Jerzy Syrowiecki
в обоих случаях все промежуточные элементы отбрасываются
куда отбрасываются, не понял
источник

к

кана in Haskell
они же в список идут
источник

JS

Jerzy Syrowiecki in Haskell
список никто не держит
источник

JS

Jerzy Syrowiecki in Haskell
(!!) этот список потребляет
источник

к

кана in Haskell
а, там код поменялся
источник

к

кана in Haskell
сначала было
 let loop = (`mod` a) . (* b)
  in length . takeWhile (/= foo) $ iter loop 1
источник

к

кана in Haskell
взял вот такой код

main = do
 args <- getArgs
 print $ case args of
   ["lazy"] -> iterate (+ 1) (1 :: Int) !! 10000000
   ["strict"] -> iterate' (+ 1) (1 :: Int) !! 10000000
   _ -> 0
источник

к

кана in Haskell
-- app lazy +RTS -s
  1,289,568,088 bytes allocated in the heap
  1,908,168,568 bytes copied during GC
    360,770,632 bytes maximum residency (16 sample(s))
    274,564,024 bytes maximum slop
           1103 MiB total memory in use (0 MB lost due to fragmentation)

-- app strict +RTS -s
    720,352,472 bytes allocated in the heap
      3,564,816 bytes copied during GC
        251,944 bytes maximum residency (2 sample(s))
        169,944 bytes maximum slop
             18 MiB total memory in use (0 MB lost due to fragmentation)
источник

к

кана in Haskell
в первом случае список хранится, потому что чтобы потребить нужный элемент, ему нужно вычислить весь список до этого элемента, но делает он это в момент !!

во втором случае это не нужно, каждый элемент списка уже самодостаточен, не требует вычисления предыдущего
источник