Mam F # funkcję:F # ograniczenie wartość w pustej listy
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
usuwa wszystkie elementy w równej indeksu na liście. Działa, jeśli podaję listę niektórych pędów, takich jak removeEven ['1';'2';'3']
otrzymam ['1';'3']
, które powinienem. Ale kiedy wstawię pustą listę jako parametr, pojawia się ten błąd:
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.
Pomoc, komukolwiek?
pamiętać, że można również dodać adnotację bezpośrednio do 'results' zamiast które mogą być bardziej idiomatyczne. – kvb
Proponowana funkcja removeOdd kończy się niepowodzeniem, gdy argumentem jest '[]'. Próbuję rozwiązać to w sposób ogólny, ale nie mogę sobie poradzić z '[]' case bez "błędu FS0030: ograniczenie wartości". Czy jest możliwe, aby taka funkcja była prawdziwie ogólna? – TurboHz