2015-06-20 88 views
1

当我尝试下面的代码在cghi:为什么Haskell中的懒惰评价“不懒”?

take 1 $ take 1 $ repeat [1..] 

我期待的1代替[[1,2,3,4,5,6,7,8,9,10,...打印结果我的终端上。

为什么懒惰评估不能正常工作,因为我希望在这种情况下?

+0

如果它不是懒惰的,它将永远循环*没有任何打印*(因为它必须在打印任何它之前计算完整结果,并且因为这将永远无法打印) 。 – sepp2k

+1

你希望会发生什么? –

+0

你可能的意思是“花1美元拿1美元重复1”(bdonlan的回答解释了为什么)。它真的很懒。 – MasterMastic

回答

10

takeInt -> [a] -> [a]类型,即它返回一个列表。看来你正在寻找head,它返回一个元素。

head $ head $ repeat [1..] 
6

take 1 $ repeat [1..]回报[[1..]]。然后take 1 [[1..]]返回[[1..]],一个无操作。