Domanda
Sto cercando di scrivere del codice F # per manipolare i polinomi, come parte di quello che voglio combinare elementi duplicati di un elenco in un singolo elemento ecco il codice pertinente:
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))
|[] -> []
Questo produce due diversi insiemi di errori:
The head.Coeff + tail.head.Coeff produces a type mismatch saying "type double * int doesn't match type double"
Anche il compilatore non è soddisfatto del modo in cui concatenano le liste, dicendo:
This expression was expected to have type PolynomialElem list but here has type PolynomialElem list -> PolynomialElem list
Qualche aiuto?
Soluzione
Ecco il codice che compila:
type PolynomialElem(Coeff : double, Power : int) =
member x.Coeff = Coeff
member x.Power = Power
let rec removeDuplicates (inlist:list<PolynomialElem>) =
match inlist with
|head:: tail ->if head.Power = tail.Head.Power then
PolynomialElem(head.Coeff + tail.Head.Coeff, head.Power) :: removeDuplicates tail.Tail
else
head :: (removeDuplicates(tail))
|[] -> []
Hai dimenticato il secondo parametro (Potenza) passato a PolynomialElem
Avevi qualche parametro "outlist" che non era usato / necessario.
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow