这是我在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) 我理解flatMapScala中的等价物是mapcat在Clojure中.
我有一个暗示,mapcat在clojure只适用于序列,不像flatMapScala更灵活.
我的问题是 - 在他们的操作方面,mapcatClojure和flatMapScala 之间有什么区别?
假设:
flatMaps功能的子集.