このディレクトリの索引
http://toro.2ch.net/test/read.cgi/tech/1364009659/540
#  540 :デフォルトの名無しさん :2013/06/09(日) 20:07:42.82 (p)ID:FF7F/XIY(6)!
#  質問ばっかでゴメンナサイ。 
#  [1..4] > [(1,2),(1,3),(1,4),(2,3),(2,4),(3,4)] 
#  みたいに出力したい。 
#  pairUp :: [a] -> [(a, a)] 
#  pairUp list = case (list) of 
#  [] -> [] 
#  [x, y] -> [(x, y)] 
#  (x:y:xs) -> (x, y) : pairUp (x:xs)だと 
#  [(1,2),(1,3),(1,4)]までしか出ない。 
#  (x:y:xs) -> (x, y) : pairUp (x:xs) ++ pairUp (y:xs) 
#  やると出力カオス
#  
#  541 :デフォルトの名無しさん :sage :2013/06/09(日) 20:22:05.24
#  pairUp :: [a] -> [(a, a)] 
#  pairUp [] = [] 
#  pairUp (x:xs) = map ((,) x) xs ++ pairUp xs 
#  

pairUp([],[]).
pairUp([X|R1],R2) :-
        pairUp(X,R1,R2,R3),
        pairUp(R1,R3).
        
pairUp(X,[],R,R).
pairUp(X,[Y|R1],[(X,Y)|R2],R) :-
        pairUp(X,R1,R2,R).