【发布时间】:2015-12-24 20:21:07
【问题描述】:
需要从 Haskell 列表的右侧开始每隔一个项目增加一次,但要保持原始顺序(例如 reverse 不是这种情况)。例如:
f [1, 2, 3] -- [1, 3, 3]
f [1, 2, 3, 4] -- [2, 2, 4, 4]
我尝试过类似以下的方法:
fc ([]) = []
fc (x:[]) = [x]
fc (x:[y]) = [x+1,y]
fc( x:xs ) = fc [x] : ( fc xs ) -- this line is wrong
附言显然,我可以两次反转(但更愿意理解原始任务)列表并应用如下内容:
helper (x:y:tail) = [x, y+1] ++ tail
fc x = reverse (helper (reverse x) )
【问题讨论】:
-
您的第二个示例是更改第 1 项和第 3 项。你想做什么?
-
@MASL 任务从右数每增加 2 个。所以从右边看列表:右边第二个是
3->(3+1)=4,现在跳过2,之后是第四个1->(1+1)=2。所以结果[2, 2, 4, 4] -
好的。监督那个细节。
-
反转列表,每隔一个元素加 1 并反转以恢复原始顺序。
-
@raymonad 是的,这是可能的,但我想了解如何从右到左处理列表,请参阅我的“附注”更新
标签: list haskell iteration reverse