2つで引数にパターンマッチするには

タプルにしてしまえばいい。ただし,function構文はつかえない。

 # let rec zip l r =
     match (l, r) with
       ([], _) -> []
     | (_, []) -> []
     | (h1::t1, h2::t2) -> (h1, h2) :: zip t1 t2
   ;;
 val zip : 'a list -> 'b list -> ('a * 'b) list = <fun>
 # zip [1;2;3;4] ['a';'b';'c'];;
 - : (int * char) list = [(1, 'a'); (2, 'b'); (3, 'c')]

パターンの中の _ はワイルドカード