2011-09-11 11 views
9

W SML często i łatwo można zdefiniować funkcję, korzystając zarówno z curryingu, jak i dopasowania wzoru. Oto prosty przykład:Mieszanie dopasowywania wzorców i curry w OCaml

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

Ignorując funkcji bibliotecznych, co jest najlepszym sposobem na to, aby SML portu? O ile mogę powiedzieć, nie ma łatwego sposobu na zadeklarowanie funkcji za pomocą zarówno dopasowywania currying i pattern.

Odpowiedz

11

Powiedziałbym, że najlepiej jest po prostu użyć wyrażenia dopasowania.

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

Jeśli nie używasz zapałek, jest nieco zawiłe, ale możesz to zrobić.

let rec zip = function 
    | [] -> (fun _ -> []) 
    | x :: xs -> 
     function 
     | [] -> [] 
     | y :: ys -> (x, y) :: zip xs ys 
Powiązane problemy