2011-09-11 31 views
9

Trong SML, việc xác định hàm bằng cách sử dụng cả kết hợp mẫu và ghép mẫu là phổ biến và dễ dàng. Dưới đây là ví dụ đơn giản:Kết hợp mẫu và pha trộn trong OCaml

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

Bỏ qua chức năng thư viện, cách tốt nhất để chuyển cổng này đến OCaml là gì? Theo như tôi có thể nói, không có cách nào dễ dàng để khai báo một hàm bằng cả currying và pattern matching.

Trả lời

11

Tôi sẽ nói tốt nhất là chỉ sử dụng biểu thức đối sánh.

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

Nếu bạn đặt không sử dụng kết hợp, có chút phức tạp, nhưng bạn có thể thực hiện việc này.

let rec zip = function 
    | [] -> (fun _ -> []) 
    | x :: xs -> 
     function 
     | [] -> [] 
     | y :: ys -> (x, y) :: zip xs ys 
Các vấn đề liên quan