このディレクトリの索引
http://hibari.2ch.net/test/read.cgi/tech/1322562648/311
#  [1] 授業単元: C言語 
#  [2] 問題文(含コード&リンク): http://ime.nu/www.kent-web.com/pubc/book/test/uploader/uploader.cgi?mode=downld&no=4921 
#  
#  課題3 与えられた2つのリストを結合する再帰関数を作成せよ。
#    プロトタイプ宣言は次のとおりとする。
#  	void mergeList(struct cell *list1, struct cell *list2, struct cell *merged);
#   結合は、list1およびlist2それぞれの先頭データを比較し、小さい方のデータを
#    mergedに追加するという手順で行う。
#    なお、並べ替え後に元のリストlist1およびlist2が破壊されていても構わない。
#    (printList(list1)、printList(list2)の結果が変化しても構わない。)
#   また、この関数の動作を確かめるmain()関数を作成し、動作を確かめよ。

'与えられた2つのリストを結合する。結合は、list1およびlist2それぞれの先頭データを比較し、小さい方のデータをList3に追加するという手順で行う。'(List1,List2,List3) :-
        'list1およびlist2それぞれの先頭データを比較し、小さい方のデータをList3に追加する'(List1,List2,List3).

'list1およびlist2それぞれの先頭データを比較し、小さい方のデータをList3に追加する'([],List2,List2).
'list1およびlist2それぞれの先頭データを比較し、小さい方のデータをList3に追加する'(List1,[],List1).
'list1およびlist2それぞれの先頭データを比較し、小さい方のデータをList3に追加する'([A|R1],[B|R2],[A|R3]) :-
        A @=< B,
        'list1およびlist2それぞれの先頭データを比較し、小さい方のデータをList3に追加する'(R1,[B|R2],R3).
'list1およびlist2それぞれの先頭データを比較し、小さい方のデータをList3に追加する'([A|R1],[B|R2],[B|R3]) :-
        A @> B,
        'list1およびlist2それぞれの先頭データを比較し、小さい方のデータをList3に追加する'([A|R1],R2,R3).