Domanda

Ho letto tutti i gradini circa restrizione valore in F #, ma io ancora non capisco. Ho il seguente codice:

type tree<'a> = 
    | Nil
    | Node of (tree<'a> * 'a * tree<'a>)

let rec flatten = function
    | Nil -> []
    | Node ( Nil, b, Nil ) -> [b]
    | Node ( l, h, p ) -> List.concat [(flatten l);[h];(flatten p)]

e il compilatore mostrano un errore:

error FS0030: Value restriction. The value 'it' has been inferred to have generic type
    val it : '_a list    
Either define 'it' as a simple data term, make it a function with explicit arguments or, if you do not intend for it to be generic, add a type annotation.
chiunque aiutare

Can me? Grazie mille;)

È stato utile?

Soluzione

mi permette di utilizzare le mie capacità di debug psichiche. Non si può chiamare flatten Nil perché, come il compilatore indica, il risultato potrebbe essere un 'a list per qualsiasi tipo 'a. È necessario aggiungere un tipo di annotazione, come ad esempio (flatten Nil : int list).

In una nota indipendenti, il secondo caso nella definizione di appiattire è inutile e può essere rimosso in quanto è anche coperto dal terzo caso.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top