为什么在 Haskell "not being lazy" 中进行惰性求值?
Why is lazy evaluation in Haskell "not being lazy"?
当我在 cghi 中尝试以下代码时:
take 1 $ take 1 $ repeat [1..]
我期待在我的终端上打印 1
而不是 [[1,2,3,4,5,6,7,8,9,10,...
的结果。
为什么惰性求值在这种情况下没有像我希望的那样运行?
take
是 Int -> [a] -> [a]
类型,即 returns 一个列表。您似乎在寻找 head
,其中 returns 一个元素。
head $ head $ repeat [1..]
take 1 $ repeat [1..]
returns[[1..]]
。然后take 1 [[1..]]
returns[[1..]]
,空操作
当我在 cghi 中尝试以下代码时:
take 1 $ take 1 $ repeat [1..]
我期待在我的终端上打印 1
而不是 [[1,2,3,4,5,6,7,8,9,10,...
的结果。
为什么惰性求值在这种情况下没有像我希望的那样运行?
take
是 Int -> [a] -> [a]
类型,即 returns 一个列表。您似乎在寻找 head
,其中 returns 一个元素。
head $ head $ repeat [1..]
take 1 $ repeat [1..]
returns[[1..]]
。然后take 1 [[1..]]
returns[[1..]]
,空操作