是否有任何方法来控制列表中元素的索引,而我正在做一个折叠?



我试图为Haskell类型做一些函数和方法,称为"多项式";它表示一个数学多项式。该类型定义如下:

data Pol = Nil | P Grade Coefficient (Pol) deriving Show

例如多项式x^3 + 2x^2 + 8可以表示为

P 3 1 (P 2 2 (P 0 8 Nil))

有一个函数叫做"list2Pol"它应该获得一个列表[Integer]并将其转换为多项式,其中该列表的索引表示该系数的等级。例如:

list2Pol [6,1,0,3] = P 3 3 (P 1 1 (P 0 6 Nil)

然而,它似乎很容易实现没有折叠,但我想知道如何实现它的折叠,因为我的代码是不工作

list2Pol :: [Integer] -> Pol
list2Pol [] = Nil
list2Pol l = foldl (x solResto -> insert (length l) x solResto) Nil l
如果你能帮助我,我会很感激的。

您可以首先使用列表[0..]来创建列表zip,然后将其用作索引:

list2Pol l = foldr ((i,x) rest -> insert i x rest) Nil (zip [0..] l)

请注意,在这种情况下,您想使用foldr而不是foldl,[]的情况是多余的,折叠将自动处理这种情况。

最新更新