【问题标题】:Haskell list to unitary sublistHaskell 列表到单一子列表
【发布时间】:2020-08-28 14:58:22
【问题描述】:

我在将列表转换为单一子列表时遇到问题

sublists :: [a] -> [[a]]
sublists [] = [[]]
sublists (x:xs) = [x:ys | ys <- sub] ++ sub
                    where sub = sublists xs

我需要一个给定的函数 子列表 [True,False] 返回 [[True],[False]] 而不是 [[True,False],[True],[False],[]] 但我只是不知道如何和感觉像打我的电脑一样。

我希望我很清楚。谢谢!

【问题讨论】:

  • 提示:使用map
  • 如果只是将其包装在列表中,您可以使用sublist = map pure

标签: list haskell sublist


【解决方案1】:

因此,您需要一个将a 转换为[a] 的函数。好吧……

makeList = \x -> [x]

(为什么我把它写成 lambda?继续阅读)

因此,您需要一个将列表中的a 转换为[a] 的函数。好吧……

makeListsInList = map (\x -> [x])

完成。

【讨论】:

  • 实际上,我需要将列表 [True,False,True,False] 转换为由列表中每个元素的列表组成的子列表。应该看起来像这样 [[True], [False], [True], [False]]
  • @Bartender94 就是这样做的
【解决方案2】:

您可以使用函数pure :: Applicative f =&gt; a -&gt; f a 将值包装到列表中,因为Applicative 的实例[] 将元素包装在单例列表中。

所以你可以将你的函数定义为:

sublists :: [a] -> [[a]]
sublists = map pure

例如:

Prelude> sublists [True, False, False, True]
[[True],[False],[False],[True]]

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-08
    • 2012-09-29
    • 1970-01-01
    相关资源
    最近更新 更多