uv.*_*ita 3 haskell lazy-evaluation fold
写这样的东西是可以的:
head $ foldr (:) [] [1..]
-- 1
Run Code Online (Sandbox Code Playgroud)
但是当我尝试处理元组时,它会进入无限循环:
head . fst $ foldr (\ x (ls, _) -> (x : ls, 0)) ([], 0) [1..]
Run Code Online (Sandbox Code Playgroud)
我需要这个的原因是因为我想在内部函数中传递生成元素的计数.像那样:
foldr go ([], 0) [1..]
go num (ls, cnt) = -- use cnt to get l and produce new pair (l : ls, cnt + 1)
Run Code Online (Sandbox Code Playgroud)
luq*_*qui 11
模式匹配默认是严格的.那是,
(\(x,y) -> (1:x,y)) _|_ = _|_
Run Code Online (Sandbox Code Playgroud)
但是,您可以使用模式使用延迟模式匹配~:
(\ ~(x,y) -> (1:x,y)) _|_ = (1:_|_, _|_)
Run Code Online (Sandbox Code Playgroud)