Haskell 如何`列出+;列表=列表[列表]]`

Haskell 如何`列出+;列表=列表[列表]]`,haskell,Haskell,如何将列表添加到另一个列表,并返回列表列表 foo :: [a] -> [a] -> [[a]] 例如,我期望的结果是: foo [1,2] [3,4] 将是[[1,2],[3,4]] ++不起作用: *Main> [1,2] ++ [3,4] [1,2,3,4] 这样肯定行吗 foo :: [a] -> [a] -> [[a]] foo a b = [a, b] 有点可笑的是,你几乎自己写下了问题的答案: foo[1,2][3,4] 将是[[1,2],[3

如何将列表添加到另一个列表,并返回列表列表

foo :: [a] -> [a] -> [[a]]
例如,我期望的结果是:

foo [1,2] [3,4]
将是
[[1,2],[3,4]]

++
不起作用:

*Main> [1,2] ++ [3,4]
[1,2,3,4]

这样肯定行吗

foo :: [a] -> [a] -> [[a]]
foo a b = [a, b]

有点可笑的是,你几乎自己写下了问题的答案:

foo[1,2][3,4] 将是[[1,2],[3,4]]

现在,你所需要做的就是从具体的示例值中抽象出来!例如,将
[1,2]
替换为
a
,将
[3,4]
替换为
b
。然后你可以告诉Haskell你想要

foo a b=[a,b]


就这样!尽管它的类型比您想要的更一般。

还要注意,
[a,b]
a:b:[]
的糖;因此,如果您需要更通用的内容,您可以使用
(:[])
创建一个单例列表,并使用
(:)
预先添加更多元素。如果你想把人搞糊涂,你甚至可以把
foo
写成
foo=(.(:[]))。(:)
你能举一个
(:[])
的例子吗
Prelude>(:[]):3
在REPL中不起作用。
(:[])
是一个函数,因为
(:)
是一个中缀函数
a->[a]->[a]
它的正确参数是
[]
我们得到了一个类型为
a->[a]
的新函数。您可以将其应用于任何内容,以将其放入单例列表中,例如,
(:[])5=[5]
我喜欢您通过抽象来解释它的方式,非常有用+1.