F # tail.Head plus списки - PullRequest
       13

F # tail.Head plus списки

0 голосов
/ 22 октября 2009

Я пытаюсь написать некоторый код 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      

Любая помощь?

1 Ответ

1 голос
/ 22 октября 2009

Вот код, который компилируется:

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))
        |[] -> []      

Вы забыли второй параметр (Power), переданный в PolynomialElem

У вас был какой-то параметр 'outlist', который не использовался / не нужен.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...