相关疑难解决方法(0)

略微概括展开

Data.List 定义

unfoldr :: (b -> Maybe (a, b)) -> b -> [a]
unfoldr f b = case f b of
  Just (a,new_b) -> a : unfoldr f new_b
  Nothing -> []
Run Code Online (Sandbox Code Playgroud)

有许多功能几乎可以使用unfoldr,但在列表的最后有问题.一个简单的"修复"是

unfoldr' :: (b -> Either (a,b) [a]) -> b -> [a]
unfoldr' f b = case f b of
  Left (a, new_b) -> a : unfoldr' f new_b
  Right r         -> r
Run Code Online (Sandbox Code Playgroud)

这个功能有标准名称吗?它有不错的属性和良好的互动foldr吗?

haskell

5
推荐指数
1
解决办法
289
查看次数

使用foldr实现inits

我必须使用map通过foldr实现inits.我得到了大部分内容,但是我在结果列表中缺少空列表元素.

inits :: [a] -> [[a]]
inits = foldr ( \ x y -> [x] : (map (x:) y) ) []
Run Code Online (Sandbox Code Playgroud)

调用时会导致:

*蓝图<inits [1,2,3]

[[1],[1,2],[1,2,3]]

我现在有点困惑,如果有人能指出我的错误的一般方向,我会很高兴.

提前致谢

解决了:

inits :: [a] -> [[a]]
inits = foldr ( \ x y -> [] : (map (x:) y) ) [[]]
Run Code Online (Sandbox Code Playgroud)

haskell fold

3
推荐指数
2
解决办法
881
查看次数

标签 统计

haskell ×2

fold ×1