このディレクトリの索引
http://pc12.2ch.net/test/read.cgi/tech/1248012902/815
#  【 課題 】http://ime.nu/rg550.hp.infoseek.co.jp/cgi-bin/joyful/img/915.txt#  【 形態 】1. Javaアプリケーション(main()で開始) 
# 
# しりとりゲームをするプログラム
# 第一段階ーShiritori.javaを次に掲載する。
#      これをEclipseに入力する
#    ー与えられた単語の可否を判定するためのクラスReferee.javaを作成する
# 
# 第二段階ーReferee.javaをしりとりのルールにのっとった判定をさせるように改善
# 
# 第一段階のRefereeの使用
# ・直前に入力された単語の末尾の文字を記憶するchar型のフィールド
#    lastChar
# ・次の単語がどの文字で始まらなければならないかをchar型で返すメソッド
#       mustBeginWith()
# ・引数として与えられた単語の可否を判定し、可ならtrueを返すとともにlastCharを更新し、否ならfalseを返すメソッド
#    isOK(String newWord)
# とりあえずは何でもかんでも「可」とするように作る

馬名しりとり :-
        write('最初の馬名は :'),
        get_line(_語1),
        sub_atom(_語1,0,1,_,_最初の文字),        
        馬名しりとり(_最初の文字,_語1,_語,[]).

馬名しりとり(_次の文字,_語,_語,_) :-
        \+(sub_atom(_語,0,1,_,_次の文字)),
        write_formatted('ゲームオーバー %t-%t はしりとりになっていません\n',[_次の文字,_語]),
        fail,!.
馬名しりとり(_次の文字,_語,_語,_履歴) :-
        member(_語,_履歴),!,
        write_formatted('ゲームオーバー %tは既出です\n',[_語]),
        fail.
馬名しりとり(_次の文字,_語,_,_) :-
        五代血統書(_語),
        fail.
馬名しりとり(_次の文字,_語,_語,_履歴) :-
        sub_atom(_語,0,1,_,_次の文字),
        write_formatted('%t-%t\n',[_次の文字,_語]).
馬名しりとり(_,_語1,_語,_履歴) :-
        馬名しりとりルール(_語1,_次の文字1),
        write('次の馬名は :'),
        get_line(_語2),
        馬名しりとり(_次の文字1,_語2,_語,[_語1|_履歴]).

馬名しりとりルール(_語,_次の文字) :-
        sub_atom(_語,Len,1,0,ン),
        Len2 is Len + 1,
        sub_atom(_語,0,Len2,_,_語2),
        馬名しりとり次の文字(_語2,_次の文字).
馬名しりとりルール(_語,_次の文字) :-
        sub_atom(_語,Len,1,0,ー),
        Len2 is Len + 1,
        sub_atom(_語,0,Len2,_,_語2),
        馬名しりとり次の文字(_語2,_次の文字).
馬名しりとりルール(_語,_次の文字) :-
        sub_atom(_語,Len,1,0,_次の文字),!.


% *** user: jbis / 2 ***
五代血統書(_馬名) :-
        jbis(_馬名,L),
        五代血統表表示(L).

jbis(_馬名,_血統書) :-
        このサイトの馬名はSJISが使われている(_馬名,_馬名sjis),
        'url述語表現'(_馬名sjis,URL1),
        '%27を切り取る'(URL1,URL2),
        concat(['http://www.jbis.or.jp/navi_search/?sid=horse&keyword=',URL2],URL),
        jbis馬名サイト検索(URL,_馬名,_血統サイトの正確なURLならび),
        馬名による血統検索(_血統サイトの正確なURLならび,_血統書).

jbis馬名サイト検索(URL,_馬名,_血統サイトの正確なURLならび) :-
        w3c(URL,X),
        concat_atom(X,X2),
        sjis2euc(X2,X3),
        split(X3,['\n','\r'],X4),
        findall(URL2,( member(A,X4),
                                この行には検索対象の馬名が存在する(A,_馬名),
                                血統サイトの正確なURLを構成する(A,URL2)),_血統サイトの正確なURLならび),
        !.

馬名による血統検索(_血統サイトの正確なURLならび,_血統書) :-
        member(URL,_血統サイトの正確なURLならび),
        w3c(URL,X),
        取れたならびすべての行をEUCに変換(X,_EUC行ならび),
        findall(_先祖馬名,(
                     member(_馬名を含む行,_EUC行ならび),
                     血統書の中の馬名を切り取る(_馬名を含む行,_先祖馬名)),
                _血統書).

このサイトの馬名はSJISが使われている(_馬名,_馬名sjis) :-
        euc2sjis(_馬名,_馬名sjis),!.

'%27を切り取る'(URL1,URL2) :-
        replace_all(URL1,'%27','',URL2),!.

取れたならびすべての行をEUCに変換(Y,Y4) :-
        concat_atom(Y,Y2),
        sjis2euc(Y2,Y3),
        split(Y3,['\n','\r'],Y4),!.

この行には検索対象の馬名が存在する(_行,_馬名) :-
        sub_atom(_行,_,_,_,'cell-br-no sort-02'),
        split(_行,['','(',')','>'],L),
        馬名は最後の二要素のうちのどちらかにある(L,_馬名),!.

馬名は最後の二要素のうちのどちらかにある(L,_馬名) :- append(_,[_馬名],L),!.
馬名は最後の二要素のうちのどちらかにある(L,_馬名) :- append(_,[_馬名,_],L),!.

血統サイトの正確なURLを構成する(_行,URL) :-
        split(_行,['"'],L),
        append(_,[U,_],L),
        concat_atom(['http://www.jbis.or.jp',U,'pedigree/'],URL),!.

血統書の中の馬名を切り取る(_行,_先祖馬名) :-
        先祖馬名を含む行はmaleという文字列を含む(_行),
        sub_atom(_行,Start,Len,_,''),
        sub_atom(_行,0,Start,_,_行1),
        split(_行1,['\r','>','','