OCaml

2011-09-11 29 views
9

modelinde eşleştirme ve kümeleme Karıştırma SML'de, hem körleme hem de desen eşleştirmeyi kullanarak bir işlevi tanımlamak yaygın ve kolaydır. İşte basit bir örnek:OCaml

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

kütüphane fonksiyonlarını yok sayarak, OCaml bu liman için en iyi yolu nedir? Anlayabildiğim kadarıyla, hem körleme hem de desen eşleştirmeyi kullanarak bir işlevi bildirmenin kolay bir yolu yoktur.

cevap

11

Sadece bir eşleşme ifadesi kullanmanın en iyisi olduğunu söyleyebilirim. Eğer maçı kullanmıyor karar verdiyseniz

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

, biraz dolambaçlı, ama sen bunu yapabilirsiniz.

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