我试图为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
,[]
的情况是多余的,折叠将自动处理这种情况。