Confused over behavior of List.mapi in F#
Posted
by James Black
on Stack Overflow
See other posts from Stack Overflow
or by James Black
Published on 2010-05-31T17:50:13Z
Indexed on
2010/05/31
17:53 UTC
Read the original article
Hit count: 418
I am building some equations in F#, and when working on my polynomial class I found some odd behavior using List.mapi
Basically, each polynomial has an array, so 3*x^2 + 5*x + 6
would be [|6, 5, 3|]
in the array, so, when adding polynomials, if one array is longer than the other, then I just need to append the extra elements to the result, and that is where I ran into a problem.
Later I want to generalize it to not always use a float
, but that will be after I get more working.
So, the problem is that I expected List.mapi
to return a List
not individual elements, but, in order to put the lists together I had to put []
around my use of mapi
, and I am curious why that is the case.
This is more complicated than I expected, I thought I should be able to just tell it to make a new List
starting at a certain index, but I can't find any function for that.
type Polynomial() =
let mutable coefficients:float [] = Array.empty
member self.Coefficients with get() = coefficients
static member (+) (v1:Polynomial, v2:Polynomial) =
let ret = List.map2(fun c p -> c + p) (List.ofArray v1.Coefficients) (List.ofArray v2.Coefficients)
let a = List.mapi(fun i x -> x)
match v1.Coefficients.Length - v2.Coefficients.Length with
| x when x < 0 ->
ret :: [((List.ofArray v1.Coefficients) |> a)]
| x when x > 0 ->
ret :: [((List.ofArray v2.Coefficients) |> a)]
| _ -> [ret]
© Stack Overflow or respective owner