2011-09-11 7 views
9

En SML, es común y fácil definir una función usando currying y matching de patrón. Aquí está un ejemplo sencillo:Coincidencia de patrón de mezcla y currying en OCaml

fun zip [] _ = [] 
    | zip _ [] = [] 
    | zip (x::xs) (y::ys) = (x,y)::(zip xs ys) 

Haciendo caso omiso de las funciones de biblioteca, ¿cuál es la mejor manera de puerto a este OCaml? Por lo que puedo decir, no hay una forma fácil de declarar una función usando currying y matching de patrones.

Respuesta

11

Yo diría que es mejor usar una expresión de coincidencia.

let rec zip xs ys = 
    match xs, ys with 
    | [], _ 
    | _, [] -> [] 
    | x :: xs, y :: ys -> (x, y) :: zip xs ys 

Si está configurado para no utilizar la función Match, es un poco intrincado, pero puede hacerlo.

let rec zip = function 
    | [] -> (fun _ -> []) 
    | x :: xs -> 
     function 
     | [] -> [] 
     | y :: ys -> (x, y) :: zip xs ys 
Cuestiones relacionadas