我是Haskell的新手,一直在尝试解决这个问题。我一直在尝试把一个成对的列表压缩成一个列表
例如,如果我有两个对子:
[(2,0),(4,5),(3,10)]
列表应返回
[2,0,0,0,0,4,0,0,0,0,3]
这个方法的思想是,第一个元素是value,第二个元素是index。下面是我目前所做的尝试:
finalList :: [(Int,Int)] -> [Int]
finalList ((x,y): xs) = replicate y 0 ++ [x] ++ finalList xs
finalList _ = []
然而,在这个问题上,我没有得到我想要的0的填充。我得到的是这样的东西:[6,0,0,0,0,0,5,0,0,0,0,0,0,0,0,0,0,12]
任何帮助将不胜感激!谢谢!
1条答案
按热度按时间h7wcgrx31#
我将提供一个提示。我还将假设输入列表中的索引是按升序排列的。
一种可能的方法是首先定义一个辅助函数,它带有一个参数,一个“索引”,用来计算到目前为止我们已经生成了多少个元素。
粗略地说,上面的逻辑是:跟踪当前位置
ix
:如果位置是所需的pos
,则发出value
。否则发出0
作为填充符。在这两种情况下,我们都需要递归,并且我们需要递增当前位置
ix
。当前位置is
将被初始化为零,如下所示:注意,当我们递归时,我们还需要了解如何处理输入列表,这一点我将留给您。