練習問題 5.2 ⑤
2つのリスト [a1; …; an] と [b1; …; bn] を引数として、[(a1, b1); …; (an, bn)] を返す関数 zip を定義せよ。(与えられたリストの長さが異なる場合は、長いリストの余った部分を捨てて良い)
(*
* 2つのリスト [a1; ...; an] と [b1; ...; bn] を引数として、
* [(a1, b1); ...; (an, bn)] を返す関数 zip を定義せよ。
* (与えられたリストの長さが異なる場合は、長いリストの
* 余った部分を捨てて良い)
*
* # zip;;
* - : 'a list -> 'b list -> ('a * 'b) list = <fun>
*)
let rec zip list1 list2 =
match list1 with
[] -> []
| v1 :: rest1 ->
match list2 with
[] -> []
| v2 :: rest2 ->
(v1, v2) :: zip rest1 rest2;;
let test1 = zip [2; 3; 4; 5; 6; 7; 8; 9; 10; 11]
[true; true; false; true; false; true; false; false; false; true] =
[(2, true); (3, true); (4, false); (5, true); (6, false); (7, true);
(8, false); (9, false); (10, false); (11, true)];;
let test2 = zip [1; 2; 3; 4; 5] ['a'; 'b'; 'c'; 'd'] =
[(1, 'a'); (2, 'b'); (3, 'c'); (4, 'd')];;
let test3 = zip [1; 2; 3; 4] ['a'; 'b'; 'c'; 'd'; 'e'] =
[(1, 'a'); (2, 'b'); (3, 'c'); (4, 'd')];;