Я пытаюсь написать некоторый код F # для манипулирования полиномами, в качестве части которого я хочу объединить повторяющиеся элементы списка в один элемент, вот соответствующий код:
type PolynomialElem(Coeff : double, Power : int) =
member x.Coeff = Coeff
member x.Power = Power
let rec removeDuplicates (inlist:list<PolynomialElem>) (outlist:list<PolynomialElem>) =
match inlist with
|head:: tail ->if head.Power = tail.Head.Power then
PolynomialElem(head.Coeff + tail.Head.Coeff) :: removeDuplicates tail.Tail
else
head :: (removeDuplicates(tail))
|[] -> []
Это приводит к двум различным наборам ошибок:
The head.Coeff + tail.head.Coeff produces a type mismatch saying "type double * int doesn't match type double"
Также компилятор недоволен тем, как я объединяю списки, говоря:
This expression was expected to have type PolynomialElem list but here has type PolynomialElem list -> PolynomialElem list
Любая помощь?