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.