In Core List.find
viene definito mediante una funzione ausiliaria, come segue:In OCaml, perché c'è una funzione ausiliaria in Core's List.find?
let find l ~f =
let rec find_aux = function
| [] -> None
| hd :: tl -> if f hd then Some hd else find_aux tl
in
find_aux l
ma può essere stabilita direttamente. Per esempio:
let rec find l ~f =
match l with
| [] -> None
| hd :: tl -> if f hd then Some hd else find tl f
C'è qualche vantaggio nell'usare una funzione ausiliaria per definire una funzione come List.find
?
In Haskell le opportunità di inlining aggiuntive che ottieni facendo questo genere di cose sono un grosso problema. Non so se OCaml è lo stesso. Termini di ricerca: trasformazione argomento statico, trasformazione worker-wrapper –