2011-09-11 9 views
9

SMLでは、カリングとパターンマッチングの両方を使用して関数を定義するのが一般的で簡単です。ここに簡単な例があります:OCamlでのパターンマッチングとカリングの組み合わせ

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

これをOCamlに移植するにはどうすればよいでしょうか?私が知る限り、カリングとパターンマッチングの両方を使って関数を宣言する簡単な方法はありません。

答えて

11

私はマッチ式を使用することをお勧めします。

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

マッチを使用しないように設定されている場合、少し畳み込まれていますが、これを行うことができます。

let rec zip = function 
    | [] -> (fun _ -> []) 
    | x :: xs -> 
     function 
     | [] -> [] 
     | y :: ys -> (x, y) :: zip xs ys 
関連する問題