let list_to_string a to_string = let buffer = Buffer.create 30 in Buffer.add_char buffer '['; for each i in List a do Buffer.add_string buffer (to_string i); Buffer.add_char buffer ';'; done; Buffer.add_char buffer ']'; Buffer.contents buffer let lazylist_to_string a to_string = let buffer = Buffer.create 30 in Buffer.add_string buffer "[^"; for each i in LList a do Buffer.add_string buffer (to_string i); Buffer.add_char buffer ';'; done; Buffer.add_string buffer "^]"; Buffer.contents buffer let stream_to_string a to_string = let buffer = Buffer.create 30 in Buffer.add_string buffer "[< "; for each i in Stream a do Buffer.add_char buffer '`'; Buffer.add_string buffer (to_string i); Buffer.add_char buffer ';'; done; Buffer.add_string buffer " >]"; Buffer.contents buffer let array_to_string a to_string = let buffer = Buffer.create 30 in Buffer.add_string buffer "[|"; for each i in Array a do Buffer.add_string buffer (to_string i); Buffer.add_char buffer ';'; done; Buffer.add_string buffer "|]"; Buffer.contents buffer let print_list a printer = print_string "["; for each i in List a do printer i; print_char ';'; done; print_string "]" let print_stream a printer = print_string "[< "; for each i in Stream a do print_char '`'; printer i; print_char ';'; done; print_string " >]" let print_array a printer = print_string "[|"; for each i in Array a do printer i; print_char ';'; done; print_string "|]" let print_int_array a = print_array a print_int let print_int_list a = print_list a print_int let print_int_stream a = print_stream a print_int let print_int_char (i,c) = Printf.printf "(%i,'%c')" i c;; print_endline "Testing ranges";; let printer = Printf.printf "%-70s => %s\n";; let string_of_int_char (i,c) = Printf.sprintf "(%i,'%c')" i c;; let string_of_char c = Printf.sprintf "'%c'" c;; print_endline "...arrays";; printer "[||]" (array_to_string [| |] string_of_int);; printer "[|1|]" (array_to_string [|1|] string_of_int);; printer "[|1;2;3;4;5|]" (array_to_string [|1;2;3;4;5|] string_of_int);; printer "[|1..5|]" (array_to_string [| 1 .. 5 |] string_of_int);; printer "[|5..1|]" (array_to_string [| 5 .. 1 |] string_of_int);; printer "[|0;1..5;6|]" (array_to_string [|0; 1 .. 5; 6 |] string_of_int);; printer "[|0;(0+1)..(4+1);6|]" (array_to_string [|0; (0+1) .. (4+1); 6 |] string_of_int);; print_endline "...lists";; printer "[]" (list_to_string [ ] string_of_int);; printer "[1;2;3;4;5]" (list_to_string [1;2;3;4;5] string_of_int);; printer "[1]" (list_to_string [1] string_of_int);; printer "1::[]" (list_to_string (1::[]) string_of_int);; printer "[1..5]" (list_to_string [1 .. 5] string_of_int);; printer "[5..1]" (list_to_string [5 .. 1] string_of_int);; printer "[0;1..5;6]" (list_to_string [0 ; 1 .. 5;6] string_of_int);; printer "[0;(0+1)..(4+1);6]" (list_to_string [0 ; (0+1) ..(4+1);6] string_of_int);; print_endline "...streams";; printer "[< >]" (stream_to_string [< >] string_of_int);; (*printer "[< '1 >]" (stream_to_string [< '1 >] string_of_int);*) printer "[< '1;'2 >]" (stream_to_string [< '1 ; '2 >] string_of_int);; printer "[< '1;'2;'3;'4;'5 >]" (stream_to_string [< '1 ; '2; '3; '4; '5 >] string_of_int);; printer "[< 1..5 >]" (stream_to_string [< 1 .. 5 >] string_of_int);; printer "[< 5..1 >]" (stream_to_string [< 5 .. 1 >] string_of_int);; printer "[< '0;1..5;'6 >]" (stream_to_string [< '0;1 .. 5;'6 >] string_of_int);; printer "[< '0;(0+1)..(4+1);'6 >]" (stream_to_string [< '0;(0+1) .. (4+1);'6 >] string_of_int);; print_endline "...lazy lists";; printer "[^^]" (lazylist_to_string [^ ^] string_of_int);; printer "[^1;2;3;4;5^]" (lazylist_to_string [^1;2;3;4;5^] string_of_int);; printer "[^1^]" (lazylist_to_string [^1^] string_of_int);; printer "1 ^:^ [^^]" (lazylist_to_string ( 1 ^:^ [^ ^] ) string_of_int);; printer "[^1..5^]" (lazylist_to_string [^1 .. 5^] string_of_int);; printer "[^5..1^]" (lazylist_to_string [^5 .. 1^] string_of_int);; printer "[^0;1..5;6^]" (lazylist_to_string [^0 ; 1 .. 5;6^] string_of_int);; printer "[^0;(0+1)..(4+1);6^]" (lazylist_to_string [^0 ; (0+1) ..(4+1);6^] string_of_int);; print_endline "Testing comprehension";; print_endline "...streams";; printer "[< i | i <- [< '1;'2;'3;'4;'5 >] >]" (stream_to_string [< i | i <- [< '1;'2;'3;'4;'5 >] >] string_of_int);; printer "[< i+1 | i <- [< '1;'2;'3;'4;'5 >] >]" (stream_to_string [< i+1 | i <- [< '1;'2;'3;'4;'5 >] >] string_of_int);; printer "[< i+1 | i <- [< '1;'2;'3;'4;'5 >]; i mod 2=0 >]" (stream_to_string [< i+1 | i <- [< '1;'2;'3;'4;'5 >]; i mod 2=0 >] string_of_int);; printer "[< i | (MoreStream) (Some i) <- [< 'None; 'None; 'None; 'Some 4; 'Some 5 >]; i mod 2=0 >]" (stream_to_string [< i | (MoreStream) (Some i) <- [< 'None; 'None; 'None; 'Some 4; 'Some 5 >]; i mod 2=0 >] string_of_int);; printer "[< (i,j) | i <- [< '1;'2;'3;'4;'5] ; j <- [< ''a';''e';''i';''o';''u' >] >]" (stream_to_string [< (i,j)| i <- [< '1;'2;'3;'4;'5 >]; j <- [< ''a';''e';''i';''o';''u' >] >] string_of_int_char);; (*printer "[< i + 1 | i <- Stream [< 1;2;3;4;5 >] >]" (stream_to_string [< i + 1| i <- Stream [< 1;2;3;4;5]] string_of_int);; print_string "[< (i,j)| i <- Stream [< 1;2;3;4;5 >] ; j <- [< 'a';'e';'i';'o';'u' >] >]"; print_list [(i,j)| i <- List [1;2;3;4;5] ; j <- List ['a';'e';'i';'o';'u']] print_int_char*) print_endline "...arrays";; printer "[|i | i <- [|1;2;3;4;5|] |]" (array_to_string [|i | i <- [|1;2;3;4;5|] |] string_of_int);; printer "[|i + 1 | i <- [|1;2;3;4;5|] |]" (array_to_string [| i+1 | i <- [|1;2;3;4;5|] |] string_of_int);; printer "[|i + 1 | i <- [|1;2;3;4;5|]; i mod 2=0 :|]" (array_to_string [| i+1 | i <- [|1;2;3;4;5|];i mod 2=0 |] string_of_int);; printer "[|(i,j) | i <- [|1;2;3;4;5|] ; j <- [|'a';'e';'i';'o';'u'|]|]" (array_to_string [|(i,j)| i <- [|1;2;3;4;5|] ; j <- [|'a';'e';'i';'o';'u'|]|] string_of_int_char);; (*printer "[i + 1 | i <- [1;2;3;4;5]]" (list_to_string [i + 1| i <- [1;2;3;4;5]] string_of_int);; print_string "[(i,j)| i <- [1;2;3;4;5] ; j <- ['a';'e';'i';'o';'u']]"; print_list [(i,j)| i <- [1;2;3;4;5] ; j <- ['a';'e';'i';'o';'u']] print_int_char*) print_endline "...lists";; printer "[i | i <- [1;2;3;4;5]]" (list_to_string [i | i <- [1;2;3;4;5]] string_of_int);; printer "[i + 1 | i <- [1;2;3;4;5] >]" (list_to_string [ i+1 | i <- [1;2;3;4;5] ] string_of_int);; printer "[i + 1 | i <- [1;2;3;4;5]; i mod 2=0 >]" (list_to_string [ i+1 | i <- [1;2;3;4;5];i mod 2=0 ] string_of_int);; printer "[(i,j) | i <- [1;2;3;4;5] ; j <- ['a';'e';'i';'o';'u']]" (list_to_string [(i,j)| i <- [1;2;3;4;5] ; j <- ['a';'e';'i';'o';'u']] string_of_int_char);; printer "[i | (i,_) <- [1,'a';2,'a';3,'a';4,'a';5,'a']]" (list_to_string [i | (i,_) <- [(1,'a');(2,'a');(3,'a');(4,'a');(5,'a')]] string_of_int);; print_endline "...lazy lists";; printer "[^ i | i <- [^ 1;2;3;4;5 ^] ^]" (lazylist_to_string [^ i | i <- [^ 1;2;3;4;5^] ^] string_of_int);; printer "[^ i + 1 | i <- [^ 1;2;3;4;5 ^] ^]" (lazylist_to_string [^ i+1 | i <- [^ 1;2;3;4;5^] ^] string_of_int);; printer "[^ i + 1 | i <- [^ 1;2;3;4;5 ^]; i mod 2=0 :^]" (lazylist_to_string [^ i+1 | i <- [^ 1;2;3;4;5 ^];i mod 2=0 ^] string_of_int);; printer "[^ (i,j) | i <- [^ 1;2;3;4;5 ^] ; j <- [^ 'a';'e';'i';'o';'u' ^] ^]" (lazylist_to_string [^ (i,j)| i <- [^ 1;2;3;4;5 ^] ; j <- [^ 'a';'e';'i';'o';'u' ^] ^] string_of_int_char);; printer "[^ i | (i,_) <- [^ 1,'a';2,'a';3,'a';4,'a';5,'a' ^] ^]" (lazylist_to_string [^ i | (i,_) <- [^ (1,'a');(2,'a');(3,'a');(4,'a');(5,'a') ^] ^] string_of_int);; print_endline "Testing cross-comprehension";; print_endline "...streams from lists";; printer "[< i | (MoreList) i <- [1;2;3;4;5] >]" (stream_to_string [< i | (MoreList) i <- [1;2;3;4;5] >] string_of_int);; printer "[< i+1 | (MoreList) i <- [1;2;3;4;5 >] >]" (stream_to_string [< i+1 | (MoreList) i <- [1;2;3;4;5] >] string_of_int);; printer "[< i+1 | (MoreList) i <- [1;2;3;4;5 >]; i mod 2=0 >]" (stream_to_string [< i+1 | (MoreList) i <- [1;2;3;4;5];i mod 2=0 >] string_of_int);; printer "[< (i,j)| (MoreList) i <- [1;2;3;4;5] | j <- ['a';'e';'i';'o';'u'] >]" (stream_to_string [< (i,j)| (MoreList) i <- [1;2;3;4;5] ; j <- ['a';'e';'i';'o';'u'] >] string_of_int_char);; printer "[< c | (MoreString) c <- \"aeiou\" >]" (stream_to_string [< c | (MoreString) c <- "aeiou" >] string_of_char);; printer "[< (i,j)| (MoreList) i <- [1;2;3;4;5] | (MoreString) j <- \"aeiou\" >]" (stream_to_string [< (i,j)| (MoreList) i <- [1;2;3;4;5] ; (MoreString) j <- "aeiou" >] string_of_int_char);; print_endline "...streams from arrays";; printer "[< i | (MoreArray) i <- [|1;2;3;4;5|] >]" (stream_to_string [< i | (MoreArray) i <- [|1;2;3;4;5|] >] string_of_int);; printer "[< i+1 | (MoreArray) i <- [|1;2;3;4;5|] >]" (stream_to_string [< i+1 | (MoreArray) i <- [|1;2;3;4;5|] >] string_of_int);; printer "[< i+1 | (MoreArray) i <- [|1;2;3;4;5|]; i mod 2=0 >]" (stream_to_string [< i+1 | (MoreArray) i <- [|1;2;3;4;5|];i mod 2=0 >] string_of_int);; printer "[< (i,j)| (MoreArray) i <- [|1;2;3;4;5|] | j <- [|'a';'e';'i';'o';'u'|]]" (stream_to_string [< (i,j)| (MoreArray) i <- [|1;2;3;4;5|] ; j <- [|'a';'e';'i';'o';'u'|] >] string_of_int_char);; print_endline "...streams from lazy lists";; printer "[< i | (LList) i <- [^ 1;2;3;4;5 ^] >]" (stream_to_string [< i | (LList) i <- [^ 1;2;3;4;5 ^] >] string_of_int);; printer "[< i+1 | (LList) i <- [^ 1;2;3;4;5 ^] >]" (stream_to_string [< i+1 | (LList) i <- [^ 1;2;3;4;5 ^] >] string_of_int);; printer "[< i+1 | (LList) i <- [^ 1;2;3;4;5 ^]; i mod 2=0 >]" (stream_to_string [< i+1 | (LList) i <- [^ 1;2;3;4;5 ^];i mod 2=0 >] string_of_int);; printer "[< (i,j)| (LList) i <- [^ 1;2;3;4;5 ^] | j <- [^ 'a';'e';'i';'o';'u' ^] >]" (stream_to_string [< (i,j)| (LList) i <- [^ 1;2;3;4;5 ^] ; j <- [^ 'a';'e';'i';'o'; 'u' ^] >] string_of_int_char);; print_endline "...lists from streams";; printer "[ i | (MoreStream) i <- [< 1 .. 5 >] ]" (list_to_string [ i | (MoreStream) i <- [< 1 .. 5 >] ] string_of_int);; printer "[ i+1 | (MoreStream) i <- [< 1 .. 5 >] ]" (list_to_string [ i+1 | (MoreStream) i <- [< 1 .. 5 >] ] string_of_int);; printer "[ i+1 | (MoreStream) i <- [< 1 .. 5 >]; i mod 2=0 ]" (list_to_string [ i+1 | (MoreStream) i <- [< 1 .. 5 >];i mod 2=0 ] string_of_int);; printer "[(i,j)| (MoreStream) i <- [< 1 .. 5 >] | j <- [''a';''e';''i';''o';''u']]" (list_to_string [(i,j)| (MoreStream) i <- [< 1 .. 5 >] ; j <- [< ''a';''e';''i';''o';''u' >]] string_of_int_char);; print_endline "...lists from arrays";; printer "[ i | (MoreArray) i <- [|1;2;3;4;5|] ]" (list_to_string [ i | (MoreArray) i <- [|1;2;3;4;5|] ] string_of_int);; printer "[ i+1 | (MoreArray) i <- [|1;2;3;4;5|] ]" (list_to_string [ i+1 | (MoreArray) i <- [|1;2;3;4;5|] ] string_of_int);; printer "[ i+1 | (MoreArray) i <- [|1;2;3;4;5|]; i mod 2=0 ]" (list_to_string [ i+1 | (MoreArray) i <- [|1;2;3;4;5|];i mod 2=0 ] string_of_int);; printer "[(i,j)| (MoreArray) i <- [1;2;3;4;5] | j <- ['a';'e';'i';'o';'u'] ]" (list_to_string [(i,j)| (MoreArray) i <- [|1;2;3;4;5|] ; j <- [|'a';'e';'i';'o';'u'|] ] string_of_int_char);; print_endline "...lists from lazy lists";; printer "[ i | (LList) i <- [^ 1;2;3;4;5 ^] ]" (list_to_string [ i | (LList) i <- [^ 1;2;3;4;5 ^] ] string_of_int);; printer "[ i+1 | (LList) i <- [^ 1;2;3;4;5 ^] ]" (list_to_string [ i+1 | (LList) i <- [^ 1;2;3;4;5 ^] ] string_of_int);; printer "[ i+1 | (LList) i <- [^ 1;2;3;4;5 ^]; i mod 2=0 ]" (list_to_string [ i+1 | (LList) i <- [^ 1;2;3;4;5 ^];i mod 2=0 ] string_of_int);; printer "[(i,j)| (LList) i <- [^ 1;2;3;4;5 ^] | j <- [^ 'a';'e';'i';'o';'u' ^] ]" (list_to_string [(i,j)| (LList) i <- [^ 1;2;3;4;5 ^] ; j <- [^ 'a';'e';'i';'o';'u' ^] ] string_of_int_char);; print_endline "...arrays from lists";; printer "[| i | (MoreList) i <- [1;2;3;4;5] |]" (array_to_string [| i | (MoreList) i <- [1;2;3;4;5] |] string_of_int);; printer "[| i+1 | (MoreList) i <- [1;2;3;4;5] |]" (array_to_string [| i+1 | (MoreList) i <- [1;2;3;4;5] |] string_of_int);; printer "[| i+1 | (MoreList) i <- [1;2;3;4;5]; i mod 2=0 |]" (array_to_string [| i+1 | (MoreList) i <- [1;2;3;4;5];i mod 2=0 |] string_of_int);; printer "[|(i,j)| (MoreList) i <- [1;2;3;4;5] | j <- ['a';'e';'i';'o';'u']|]" (array_to_string [|(i,j)| (MoreList) i <- [1;2;3;4;5] ; j <- ['a';'e';'i';'o';'u']|] string_of_int_char);; print_endline "...arrays from streams";; printer "[| i | (MoreStream) i <- [< 1 .. 5 >] |]" (array_to_string [| i | (MoreStream) i <- [< 1 .. 5 >] |] string_of_int);; printer "[| i+1 | (MoreStream) i <- [< 1 .. 5 >] |]" (array_to_string [| i+1 | (MoreStream) i <- [< 1 .. 5 >] |] string_of_int);; printer "[| i+1 | (MoreStream) i <- [< 1 .. 5 >]; i mod 2=0 |]" (array_to_string [| i+1 | (MoreStream) i <- [< 1 .. 5 >];i mod 2=0 |] string_of_int);; printer "[|(i,j)| (MoreStream) i <- [1;2;3;4;5] | j <- ['a';'e';'i';'o';'u']|]" (array_to_string [|(i,j)| (MoreStream) i <- [< '1;'2;'3;'4;'5 >] ; j <- [< ''a';''e';''i';''o';''u' >]|] string_of_int_char);; print_endline "...arrays from lazy lists";; printer "[| i | (LList) i <- [^ 1;2;3;4;5 ^] |]" (array_to_string [| i | (LList) i <- [^ 1;2;3;4;5 ^] |] string_of_int);; printer "[| i+1 | (LList) i <- [^ 1;2;3;4;5 ^] |]" (array_to_string [| i+1 | (LList) i <- [^ 1;2;3;4;5 ^] |] string_of_int);; printer "[| i+1 | (LList) i <- [^ 1;2;3;4;5 ^]; i mod 2=0 |]" (array_to_string [| i+1 | (LList) i <- [^ 1;2;3;4;5 ^] ;i mod 2=0 |] string_of_int);; printer "[|(i,j)| (LList) i <- [^ 1;2;3;4;5 ^] | j <- [^ 'a';'e';'i';'o';'u' ^] |]" (array_to_string [|(i,j)| (LList) i <- [^ 1;2;3;4;5 ^] ; j <- [^ 'a';'e';'i';'o';'u' ^] |] string_of_int_char);; print_endline "...lazylists from streams";; printer "[^ i | (MoreStream) i <- [< 1 .. 5 >] ^]" (lazylist_to_string [^ i | (MoreStream) i <- [< 1 .. 5 >] ^] string_of_int);; printer "[^ i+1 | (MoreStream) i <- [< 1 .. 5 >] ^]" (lazylist_to_string [^ i+1 | (MoreStream) i <- [< 1 .. 5 >] ^] string_of_int);; printer "[^ i+1 | (MoreStream) i <- [< 1 .. 5 >]; i mod 2=0 ^]" (lazylist_to_string [^ i+1 | (MoreStream) i <- [< 1 .. 5 >];i mod 2=0 ^] string_of_int);; printer "[^(i,j)| (MoreStream) i <- [< 1 .. 5 >] | j <- [''a';''e';''i';''o';''u'] ^]" (lazylist_to_string [^ (i,j)| (MoreStream) i <- [< 1 .. 5 >] ; j <- [< ''a';''e';''i';''o';''u' >] ^] string_of_int_char);; print_endline "...lazylists from arrays";; printer "[^ i | (MoreArray) i <- [|1;2;3;4;5|] ]" (lazylist_to_string [^ i | (MoreArray) i <- [|1;2;3;4;5|] ^] string_of_int);; printer "[^ i+1 | (MoreArray) i <- [|1;2;3;4;5|] ]" (lazylist_to_string [^ i+1 | (MoreArray) i <- [|1;2;3;4;5|] ^] string_of_int);; printer "[^ i+1 | (MoreArray) i <- [|1;2;3;4;5|]; i mod 2=0 ]" (lazylist_to_string [^ i+1 | (MoreArray) i <- [|1;2;3;4;5|];i mod 2=0 ^] string_of_int);; printer "[^ (i,j)| (MoreArray) i <- [1;2;3;4;5] | j <- ['a';'e';'i';'o';'u'] ^]" (lazylist_to_string [^ (i,j)| (MoreArray) i <- [|1;2;3;4;5|] ; j <- [|'a';'e';'i';'o';'u'|] ^] string_of_int_char);; print_endline "...lazylists from lists";; printer "[^ i | (MoreList) i <- [ 1;2;3;4;5 ] ]" (lazylist_to_string [^ i | (MoreList) i <- [ 1;2;3;4;5 ] ^] string_of_int);; printer "[^ i+1 | (MoreList) i <- [ 1;2;3;4;5 ] ]" (lazylist_to_string [^ i+1 | (MoreList) i <- [ 1;2;3;4;5 ] ^] string_of_int);; printer "[^ i+1 | (MoreList) i <- [ 1;2;3;4;5 ]; i mod 2=0 ]" (lazylist_to_string [^ i+1 | (MoreList) i <- [ 1;2;3;4;5 ];i mod 2=0 ^] string_of_int);; printer "[^ (i,j)| (MoreList) i <- [ 1;2;3;4;5 ] | j <- [ 'a';'e';'i';'o';'u' ] ^]" (lazylist_to_string [^ (i,j)| (MoreList) i <- [ 1;2;3;4;5 ] ; j <- [ 'a';'e';'i';'o';'u' ] ^] string_of_int_char);; print_endline "Testing for-each";; print_endline "...lists";; print_string "for each i in List ['a';'b';'c';'d'] do print_char i done =>";; for each i in List ['a';'b';'c';'d'] do print_char i done;; print_newline (); let a = for each i in List.map [1;2;3;4;5] do i + 1 done in printer "for each i in List.map [1;2;3;4;5] do i + 1 done" (list_to_string a string_of_int);; (*let b = for each acc c in [] <- ListLabels.fold_left [1;2;3;4;5] do c::acc done; printer "for each acc c in [] <- ListLabels.fold_left [1;2;3;4;5] do [c::acc] done" (list_to_string b string_of_int); *) (*let b = for each acc in ListLabels.fold_left ~init:[] [1;2;3;4;5] ~f: do done;*) (*let c = for each c acc in [] <- ListLabels.fold_right [1;2;3;4;5] do [c::acc] done; printer "for each c acc in [] <- ListLabels.fold_right [1;2;3;4;5] do [c::acc] done" (list_to_string c string_of_int); *) print_endline "...arrays"; print_string "for each i in Array [|'a';'b';'c';'d'|] do print_char i done =>"; for each i in Array [|'a';'b';'c';'d'|] do print_char i done; print_newline (); print_string "for each i c in Array.iteri [|'a';'b';'c';'d'|] do print_int_char (i,c) done =>"; for each i c in Array.iteri [|'a';'b';'c';'d'|] do print_int_char (i,c) done; print_newline ();; let a = for each i in Array.map [|1;2;3;4;5|] do i + 1 done in printer "for each i in Array.map [|1;2;3;4;5|] do i + 1 done" (array_to_string a string_of_int);; (* print_endline "...streams"; print_string "for each i in MoreStream [< ''a';''b';''c';''d' >] do print_char i done =>"; for each i in MoreStream [< ''a';''b';''c';''d' >] do print_char i done; print_newline (); let a = for each i in MoreStream.map [< '1;'2;'3;'4;'5 >] do i + 1 done; printer "for each i in MoreStream.map [< '1;'2;'3;'4;'5 >] do i + 1 done" (stream_to_string a string_of_int); print_endline "...lazy lists"; print_string "for each i in LList [^'a';'b';'c';'d'^] do print_char i done =>"; for each i in LList [^'a';'b';'c';'d'^] do print_char i done; print_newline (); print_string "for each i c in LList.iteri [^'a';'b';'c';'d'^] do print_int_char (i,c) done =>"; for each i c in LList.iteri [^'a';'b';'c';'d'^] do print_int_char (i,c) done; print_newline ();; *)