タプルにしてしまえばいい。ただし,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')]
パターンの中の _ はワイルドカード。