このディレクトリの索引
http://hibari.2ch.net/test/read.cgi/tech/1291471791/721
#  firefox3.6のbockmark形式の a.html、b.htmlを 
#  マージして c.html として出力するプログラムを誰か書いてください。 
#   
#  例; 
#  <a.html> 
#  <link>ホームページA 
#  <link>ホームページB 
#  <link>ホームページC 
#   
#  <b.html> 
#  <link>ホームページA 
#  <link>ホームページY 
#  <link>ホームページZ 
#   
#  <diff.html> 
#  <link>ホームページY 
#  <link>ホームページZ 
#   
#  <c.html> 
#  <link>ホームページA 
#  <link>ホームページB 
#  <link>ホームページC 
#  <link>ホームページY 
#  <link>ホームページZ 
#   
#  a.html と b.html の差分 diff.html 
#  a.html に diff.html を追加し c.html 
# 

'a.html と b.html の差分 diff.html'(_a_html,_b_html,_差分html) :-
        'bookmarks.htmlの解析'('a.html',_頭部ならび_a,_リンク部ならび_a,_末尾部ならび_a),
        'bookmarks.htmlの解析'('b.html',_頭部ならび_b,_リンク部ならび_b,_末尾部ならび_b),
        差分の生成(_リンク部ならび_b,_リンク部ならび_a,_差分リンク部),
        append(_頭部ならび_a,_差分リンク部,_末尾ならび_a,_差分html行ならび),
        put_lines('diff.html',_差分hmtl行ならび).

'a.html に diff.html を追加し c.html'(_a_html,_差分html,c_html) :-
        'bookmarks.htmlの解析'('a.html',_頭部ならび_a,_リンク部ならび_a,_末尾部ならび_a),
        'bookmarks.htmlの解析'('diff.html',_頭部ならび_d,_リンク部ならび_d,_末尾部ならび_d),
        append(_リンク部_a,_リンク部_d,_新しいリンク部),
        append(_頭部ならび_a,_新しいリンク部,_末尾ならび_a,_c_html行ならび),
        put_lines('c.html',_c_html行ならび),!.

'bookmarks.htmlの解析'(HTMLファイル,_頭部ならび,_リンク部ならび,_末尾部ならび) :-
        get_lines(HTMLファイル,Lines),
        'bookmarks.htmlの構造は最初に頭部があり、行頭にDLタグがある行まで続く。その後がリンク部。行頭に/DLタグが来たらその行から以後は末尾部。'(Lines,_頭部ならび,_リンク部ならび,_末尾部ならび).        

'bookmarks.htmlの構造は最初に頭部があり、行頭にDLタグがある行まで続く。その後がリンク部。行頭に/DLタグが来たらその行から以後は末尾部。'(Lines,_頭部ならび,_リンク部ならび,_末尾部ならび) :-
        'bookmarks.htmlの構造は最初に頭部があり、行頭にDLタグがある行まで続く。'(Lines,_頭部ならび,_残りならび),
        'その後がリンク部。行頭に/DLタグが来たらその行から以後は末尾部。'(_残りならび,_リンク部ならび,_末尾部ならび),!.

'bookmarks.htmlの構造は最初に頭部があり、行頭にDLタグがある行まで続く。'(Lines,_頭部ならび,_残りならび) :-
        append(_頭部ならびの一,[_行|_残りならび],Lines),
        atom_chars(_行,['<','D','L','>'|_]),
        append(_頭部ならびの一,[_行],_頭部ならび),!.

'その後がリンク部。行頭に/DLタグが来たらその行から以後は末尾部。'(_残りならび,_リンク部ならび,_末尾部ならび) :-
        append(_リンク部,[_行2|_末尾部ならびの一],_残りならび),
        atom_chars(_行2,['<','/','D','L','>'|_]),
        _末尾ならび = [_行2|_末尾部ならび],!.

差分の生成(_リンク部ならび_1,_リンク部ならび_2,_差分リンク部) :-
        'URL部分だけ抜き取る'(_リンク部_1,_リンク部_2,_参照URLならび_1,_参照URLならび_2),
        findall(_URL,(
                    append(_,[_URL|_],_参照URLならび_2),
                    \+(append(_,[_URL|_],_参照URLならび_1))),
                _差分参照URLならび),
        行とURLを対応させる(_リンク部ならび_2,_差分参照URLならび,_差分リンク部).

'URL部分だけ抜き取る'(_リンク部_1,_リンク部_2,_参照URL_1,_参照URL_2) :-
        参照URLならび(_リンク部ならび_1,_参照URL_1),
        参照URLならび(_リンク部ならび_2,_参照URL_2),!.

参照URLならび(_リンク部ならび,_参照URLならび) :-
        findall(_参照URL,(
                    append(_,[_行|_],_リンク部ならび),
                    参照URL(_行,_参照URL)),
                _参照URLならび).

参照URL(_行,_参照URL) :-
        split(_行,['"'],[_,_参照URL|_]),!.

行とURLを対応させる(_リンク部ならび_2,_差分参照URLならび,_差分リンク部) :-
        findall(_行,(
                    append(_,[_行|_],_リンク部ならび_2),
                    参照URL(_行,_参照URL),
                    append(_,[_参照URL|_],_差分参照URLならび)),
                _差分リンク部).