2015-06-20 147 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..]],一個無操作。