作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
给定 Haskell 中的扁平列表:
['a', 'b','c','d']
如何将其更改为:
[['a'], ['b'], ['c'], ['d']]
最佳答案
描述您想要执行的操作的一种方法是获取列表中的每个元素,并将其与另一个列表单独包装。或者,您希望对列表中的每个元素执行操作 'a' ---> ['a']
。
每当您谈论将“列表中的每个元素单独转换为其他元素”时,您都在谈论 map
[0],因此我们将稍微编写一下此函数喜欢
example :: [Char] -> [[Char]]
example cs = map _ cs
其中 _
是函数 'a' ---> ['a']
。不过,这个函数可以写成显式匿名函数
example :: [Char] -> [[Char]]
example cs = map (\c -> [c]) cs
这将实现我们所需要的!
但是我们可以更进一步。首先,在 Haskell 中,如果应用的最后一个参数与最后一个输入参数相同,则允许您删除。或者,更具体地说,我们也可以将 example
写为
example :: [Char] -> [[Char]]
example = map (\c -> [c])
只需删除参数列表中的 cs
以及作为 map
的参数即可。其次,我们可以注意到 example
的类型比它应有的要弱。当然是更好的编写方式
example :: [a] -> [[a]]
example = map (\c -> [c])
这反射(reflect)出我们没有在内部使用任何特定于 Char
的内容。
[0] 或者,更一般地说,fmap
关于haskell - 'concat' : transforming a flattened list into a nested list 的逆,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26772517/
我是一名优秀的程序员,十分优秀!