我是Haskell的新手,我正在尝试编写一个简单的函数,它接受一个整数列表并返回一个列表,以便将第一个元素添加到列表的所有元素中。
这是我到目前为止所做的。
addFirstEl [] = []
addFirstEl (x:xs) = [x + x | x <- xs]
不幸的是,所有this
成功完成的工作都是返回一个没有第一个元素而其他元素加倍的列表。
答案 0 :(得分:6)
x
在列表推导中的绑定隐藏了模式中的变量x
。试试这个:
addFirstEl [] = []
addFirstEl (x1:xs) = [x1 + x2 | x2 <- xs]
修改强>
回复你的评论
第一个元素仍然从返回的列表中删除
在(x1:xs)
中,xs
是列表的余数或tail
。它是x1
之后的所有元素,即head
。如果您想将x1
添加到包括其自身在内的所有元素,您可以编写
addFirstEl [] = []
addFirstEl (x1:xs) = [x1 + x2 | x2 <- (x1:xs)]
或head
addFirstEl [] = []
addFirstEl xs = [head xs + x | x <- xs]
答案 1 :(得分:3)
试试这个:
addFirstEl [] = []
addFirstEl l@(x:_) = [x + x1 | x1 <- l ]
或
addFirstEl [] = []
addFirstEl l@(x:_) = map (+ x) l