In F #, una funzione ricorsiva di List.filter
può essere implementata come:
let filter f =
let rec filterImpl f acc = function
| [] -> List.rev acc
| h :: t -> filterImpl f (if f h then h :: acc else acc) t
filterImpl f []
Ma può anche essere implementato da una chiusura (cioè senza passare f
esplicitamente in filterImpl
)
let filter f =
let rec filterImpl acc = function
| [] -> List.rev acc
| h :: t -> filterImpl (if f h then h :: acc else acc) t
filterImpl []
Qual è la differenza e quale è preferito in F # o in generale nella programmazione funzionale?