このディレクトリの索引
%%%% zipの再帰的定義 %%%%

zip([],[],[]).
zip([A|R1],[B|R2],[[A,B]|R3]) :-
        zip(R1,R2,R3).


上の再帰的定義でラベルL1,L2,L3が表面に出るように工夫したもの


%%%% zipの再帰を使わない定義 %%%%

zip(L1,L2,L3) :-
        findall([A,B],(
                    nth1(_nth1,L1,A),
                    nth1(_nth1,L2,B)),
                L3).

%  L1,L2の要素数がそれぞれ1000だとすると, 1000 * 1000 = 1000000回 nth1が導出される
%  から注意。
%  以下のように改善が可能。

zip(L1,L2,L3) :-
        findall([A,B],(
                    nth1(_nth1,L1,A),
                    zip_1(_nth1,L2,B)),
                L3).

zip_1(_nth1,L2,B) :-
        nth1(_nth1,L2,B),!.