gpt4 book ai didi

haskell - 为什么 foldr 对 Haskell 中的元组不懒惰

转载 作者:行者123 更新时间:2023-12-01 07:56:38 25 4
gpt4 key购买 nike

可以这样写:

head $ foldr (:) [] [1..]
-- 1

但是当我尝试处理元组时,它会进入无限循环:
head . fst $ foldr (\ x (ls, _) -> (x : ls, 0)) ([], 0) [1..]

我需要这个的原因是因为我想在内部函数中传递生成元素的计数。像那样:
foldr go ([], 0) [1..]
go num (ls, cnt) = -- use cnt to get l and produce new pair (l : ls, cnt + 1)

最佳答案

模式匹配默认是严格的。那是,

(\(x,y) -> (1:x,y)) _|_ = _|_

您可以使用 ~ 使用惰性模式匹配模式,虽然:
(\ ~(x,y) -> (1:x,y)) _|_ = (1:_|_, _|_)

关于haskell - 为什么 foldr 对 Haskell 中的元组不懒惰,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23836143/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com