List Haskell在列表方面遇到了麻烦
我是Haskell的新手,我正在尝试编写一个简单的函数,它接受一个整数列表并返回一个列表,这样第一个元素就会添加到列表的所有元素中 这就是我目前所拥有的List Haskell在列表方面遇到了麻烦,list,haskell,list-comprehension,List,Haskell,List Comprehension,我是Haskell的新手,我正在尝试编写一个简单的函数,它接受一个整数列表并返回一个列表,这样第一个元素就会添加到列表的所有元素中 这就是我目前所拥有的 addFirstEl [] = [] addFirstEl (x:xs) = [x + x | x <- xs] addFirstEl[]=[] addFirstEl(x:xs)=[x+x | x列表理解中x的绑定正在隐藏模式中的变量x。请尝试以下操作: addFirstEl [] = [] addFirstEl (x1:xs) = [
addFirstEl [] = []
addFirstEl (x:xs) = [x + x | x <- xs]
addFirstEl[]=[]
addFirstEl(x:xs)=[x+x | x列表理解中x
的绑定正在隐藏模式中的变量x
。请尝试以下操作:
addFirstEl [] = []
addFirstEl (x1:xs) = [x1 + x2 | x2 <- xs]
或者在头部方面
addFirstEl [] = []
addFirstEl xs = [head xs + x | x <- xs]
addFirstEl[]=[]
addFirstEl xs=[head xs+x | x列表理解中的x
绑定正在隐藏模式中的变量x
。请尝试以下操作:
addFirstEl [] = []
addFirstEl (x1:xs) = [x1 + x2 | x2 <- xs]
或者在头部方面
addFirstEl [] = []
addFirstEl xs = [head xs + x | x <- xs]
addFirstEl[]=[]
addFirstEl xs=[head xs+x | x试试这个:
addFirstEl [] = []
addFirstEl l@(x:_) = [x + x1 | x1 <- l ]
试试这个:
addFirstEl [] = []
addFirstEl l@(x:_) = [x + x1 | x1 <- l ]
只需为xs
中的元素使用不同的名称,谢谢!但是,第一个元素仍然会从返回的列表中删除。只需为xs
中的元素使用不同的名称,谢谢!但是,第一个元素仍然会从返回的列表中删除。我非常喜欢head xs
版本,因为它清楚地表达了相反,@AlainO'Deahead
是一个部分操作,因此每次使用head
都会给程序员增加负担——即证明其参数不为空。相比之下,第一个解决方案不需要任何证明,因此可以说更容易安全地使用。@chixs
是非空的,这是因为上面的空xs有一个单独的例子。@Cubic:而且如果xs
是空的,头xs+x
部分永远不会被执行。当然,在这种情况下,证明是微不足道的。不过,提供微不足道的证明比不提供任何证明更难。在一般情况下证明可能非常重要,标准类型检查之外的工具可能有助于确定正确性,例如,我非常喜欢head xs
版本,因为它清楚地表达了意图。@AlainO'Dea另一方面head
是一个局部操作,因此每次使用head
都会给程序员增加负担,即对prove证明它的参数不是空的。相比之下,第一个解决方案不需要任何证明,因此可以说更容易安全地使用。@chi证明xs
非空的原因很简单,因为上面有一个单独的空xs的例子。@Cubic:而且头xs+x
部分不会是空的如果xs
为空,则可以执行ver。当然,在这种情况下,证明是微不足道的。但是,提供微不足道的证明比根本不提供任何证明更难。在一般情况下,证明可能是不微不足道的,标准类型检查之外的工具可能有助于确定正确性,例如。