1
当我尝试下面的代码在cghi:为什么Haskell中的懒惰评价“不懒”?
take 1 $ take 1 $ repeat [1..]
我期待的1
代替[[1,2,3,4,5,6,7,8,9,10,...
打印结果我的终端上。
为什么懒惰评估不能正常工作,因为我希望在这种情况下?
当我尝试下面的代码在cghi:为什么Haskell中的懒惰评价“不懒”?
take 1 $ take 1 $ repeat [1..]
我期待的1
代替[[1,2,3,4,5,6,7,8,9,10,...
打印结果我的终端上。
为什么懒惰评估不能正常工作,因为我希望在这种情况下?
take
是Int -> [a] -> [a]
类型,即它返回一个列表。看来你正在寻找head
,它返回一个元素。
head $ head $ repeat [1..]
take 1 $ repeat [1..]
回报[[1..]]
。然后take 1 [[1..]]
返回[[1..]]
,一个无操作。
如果它不是懒惰的,它将永远循环*没有任何打印*(因为它必须在打印任何它之前计算完整结果,并且因为这将永远无法打印) 。 – sepp2k
你希望会发生什么? –
你可能的意思是“花1美元拿1美元重复1”(bdonlan的回答解释了为什么)。它真的很懒。 – MasterMastic