相关疑难解决方法(0)

编写concat和map来获取concatMap:为什么f?

这是我在Haskell的第一次探索,所以请原谅我是否应该是显而易见的.

我整个下午一直在玩Haskell ,使用我自己的列表类型(典型的缺点)在HaskellWiki上查阅99个问题的教程.我继续添加"明显"的功能,并且我尽可能地使它们尽可能简洁(尽可能使用无点表示法)

第12个问题是关于解码游程编码列表,即:

> decode [Multiple 5 'a', Single 'b', Multiple 2 'c']
"aaaaabcc"
Run Code Online (Sandbox Code Playgroud)

我考虑使用map解码每个元素,然后concat结果(感谢谷歌),最后记得我concatMap在读数中看到过类似的东西,GHCi很快证实:

> :t map
map :: (a -> b) -> [a] -> [b]
> :t concat
concat :: [[a]] -> [a]
> :t concatMap
concatMap :: (a -> [b]) -> [a] -> [b]
Run Code Online (Sandbox Code Playgroud)

重新实现看起来很明显concatMap:

concatMap :: (a -> [b]) -> [a] -> [b]
concatMap = concat . map
Run Code Online (Sandbox Code Playgroud)

除了GHCi非常抱怨:

List.hs:110:15:
    Couldn't match expected type `[a] …
Run Code Online (Sandbox Code Playgroud)

haskell

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

在Clojure中的mapcat和Scala中的flatMap之间的区别是什么?

我理解flatMapScala中的等价物是mapcat在Clojure中.

我有一个暗示,mapcat在clojure只适用于序列,不像flatMapScala更灵活.

我的问题是 - 在他们的操作方面,mapcatClojure和flatMapScala 之间有什么区别?

假设:

  • 据我所知,Scala有一个丰富的类型系统,而Clojure有可选的输入 - 我很想知道mapcat接受的参数是否有限制,这使得它只有flatMaps功能的子集.

scala clojure

10
推荐指数
2
解决办法
4675
查看次数

标签 统计

clojure ×1

haskell ×1

scala ×1