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?

È stato utile?

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
scroll top