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