【发布时间】:2021-06-07 21:57:18
【问题描述】:
add_lists list1 list2:返回每个列表中相同位置的元素之和作为 新名单。如果一个列表比另一个短,假设较短的列表在 “缺失的地方”。 这是我的haskell 代码:
add_lists list1 list2= if length.list1 < length.list2
then list2 ++ [i] && zipWith(+)list1 list2
else zipWith (+) list1 list2
where [i|i=0,i=length.list2-length.list1]
我不断收到错误
【问题讨论】:
-
提示:利用显式递归。
-
由于缺乏焦点而投票结束。 stackoverflow.com/help/how-to-ask
-
您的语法错误。
length . list1将与list1函数组成length函数,但list1不是函数。我不知道你的where子句应该做什么,但那是为了绑定一个变量。你有一个看起来像列表理解的东西,但语法都是假的。我无法判断它的正面或反面。 -
@dfeuer:“逐字逐句”阅读。
length.list1= “长度 oflist1”,如head . reverse= “反向头部(列表)”;list2 ++ [i]= “到list2,追加(通过变异)列表i”;&&= “和(然后)”;并且[i|i=0,i=length.list2-length.list1]是“列表i(再次将[]解释为符号)等于 0(无处不在)并且i是(在“有”的意义上)长度list2减去长度list1”。 -
您可以在定义组合器
pw f = map f . transpose(其中transpose来自Data.List)的列表上创建函数的逐点版本。因此,对于这种情况,您可以定义一个更通用的sumPW = pw sum,它对列表列表进行操作。然后add_lists list1 list2 = sumPW [list1, list2].
标签: haskell