gpt4 book ai didi

haskell - 'concat' : transforming a flattened list into a nested list 的逆

转载 作者:行者123 更新时间:2023-12-03 06:29:33 24 4
gpt4 key购买 nike

给定 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com