小编Jun*_*ung的帖子

使用foldr定义地图(开发)

很难理解折叠...扩展是否正确?也会欣赏任何会使折叠更容易消化的链接或类比.

foldMap :: (a -> b) -> [a] -> [b]
foldMap f [] = []
foldMap f xs = foldr (\x ys -> (f x) : ys) [] xs


b =  (\x ys -> (f x):ys)
foldMap (*2) [1,2,3]
= b 1 (b 2 (foldr b [] 3))
= b 1 (b 2 (b 3 ( b [] [])))
= b 1 (b 2 ((*2 3) : []))
= b 1 ((*2 2) : (6 :[]))
= (* 2 1) …
Run Code Online (Sandbox Code Playgroud)

haskell currying fold

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

Data.Map中的map函数与fromList函数之间的连接

我不理解Map.map(Data.Map中的map函数)和Map.fromList的签名.功能本身就在签名中.我也不确定为什么在我想要实现Map.member或Map.filter或Map.size等其他函数时总是调用Map.fromList.就像为什么我不能直接在列表中应用函数,而是必须通过Map.fromList间接应用它.

最后但并非最不重要的...... fromList'的签名.我注意到被调用的Map.Map函数有一个大写M而不是小m,它是关闭的(参考第二行的Map.map)为什么会这样?

非常感谢

Map.fromList :: Ord k => [(k, a)] -> Map.Map k a
Map.map :: (a -> b) -> Map.Map k a -> Map.Map k b

fromList' :: (Ord a) => [(a,b)] -> Map.Map a b
fromList' = foldl (\acc (a,b) -> Map.insert a b acc) Map.empty
Run Code Online (Sandbox Code Playgroud)

dictionary haskell map-function

2
推荐指数
1
解决办法
213
查看次数

使用fold实现二叉树上的映射

我正在努力使用树定义地图foldBT.我的想法是将树转换为列表,将运算符映射到列表,然后将列表转换回树.但它听起来效率低,也没有利用foldBT...我试图运行,foldBT (*2) Nil (numTree [3,5,7]但ghci报告错误.我真的不明白这个功能foldBt是如何运作的.一个例子就是很棒.

data SimpleBT a = Nil | N a (SimpleBT a) (SimpleBT a) deriving (Show, Eq)

foldBT :: (a -> b -> b -> b) -> b -> SimpleBT a -> b
foldBT f e Nil = e
foldBT f e (N a left right) = f a (foldBT f e left) (foldBT f e right)

mapTree :: (a -> b) -> SimpleBT a -> SimpleBT b
mapTree …
Run Code Online (Sandbox Code Playgroud)

binary-tree haskell fold

2
推荐指数
1
解决办法
97
查看次数

了解数据类型,类型类的签名,并使数据类型成为类型类的实例

正在阅读为了一个伟大的好事学习你一个哈斯克尔!理解实例和善意都有很大的麻烦.

Q1:那类型tTofu t,与那种签名功能的行为(* -> (* -> *)) -> *?而整体的签名tofu* -> *,不是吗?因为(* -> *) -> *结果*等等(* -> (* -> *)) -> *

Q2:当我们想要创建Frank a b类型类的实例时Tofu t,数据类型Frank a b也必须具有相同的类型t.这意味着某种a*,b* -> *,以及哪种结果b a(* -> *) -> *产生*.那是对的吗?

Q3:xin tofu x代表j a因为两者都有 …

haskell typeclass type-kinds

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