I tiene un F # función:F restricción # valor en lista vacía
let removeEven (listToGoUnder : _ list) =
let rec listRec list x =
match list with
| [] -> []
| head::tail when (x%2 = 0) -> head :: listRec (tail) (x+1)
| head::tail -> listRec (tail) (x+1)
listRec listToGoUnder 0
Se elimina todos los elementos en un índice incluso en una lista. Funciona si doy alguna importancia a la lista, como removeEven ['1';'2';'3']
Obtengo ['1';'3']
que se supone que debo. Pero cuando inserto una lista vacía como parámetro, obtengo este error:
stdin(78,1): 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.
¿Ayuda, alguien?
Tenga en cuenta que también se puede añadir la anotación directamente a 'results' lugar, que podría ser más idiomático. – kvb
La función removeOdd propuesta falla cuando el argumento es '[]'. Estoy tratando de resolver esto de forma genérica, pero no puedo manejar el '' caso sin un "error FS0030: restricción de valor". ¿Es posible hacer que tal función sea verdaderamente genérica? – TurboHz