このディレクトリの索引

http://pc12.2ch.net/test/read.cgi/tech/1250204272/390
# [1] 授業単元: C言語
# [2] 問題文(含コード&リンク):
# http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/9936.txt
#
# 課題:
# 「単語」とはどういうものかと定義し、その定義に従って指定されたファイルから
# 単語を取り出し、表示させる。また、単語の個数も表示させる。
#
# 制約:
# ファイルオープン・クローズを使う。
# 関数化を行う。
# 指定ファイル(ファイル名:sample.txt):
# You Raise Me Up by Secret Garden

t676 :-
    get_chars('sample.txt',L),
    単語ならび(L,[],_単語ならび,R),
    length(_単語ならび,_個数),
    write_formatted('単語の総数は %t \n',[_個数]),
    member(_単語,_単語ならび),
    write_formatted('%t\n',[_単語]),
    fail.
t676.

単語ならび([],X,X,[]) :- !.
単語ならび(_文,Y,X,R) :-
    単語(_文,_単語_文字ならび,R1),
    単語ならびの二(_単語_文字ならび,Y,Z),
    単語ならび(R1,Z,X,R),!.
単語ならび([_|R1],Y,X,R) :-
    単語ならび(R1,Y,X,R).

単語ならびの二(_単語_文字ならび,Y,Z) :-
    atom_chars(_単語,_単語_文字ならび),
    member(_単語,Y),
    Z = Y,!.
単語ならびの二(_単語_文字ならび,Y,Z) :-
    atom_chars(_単語,_単語_文字ならび),
    \+member(_単語,Y)),
    Z = [_単語|Y],!.

単語(_文,_単語_文字ならび,R) :-
    区切り記号でない連続(_文,_単語_文字ならび,R).

区切り記号(A) :-
    member(A,[' ','\n','\t','.',',',':',';']),!.

区切り記号でない連続([A],[A],[]) :-
    \+(区切り記号(A)),!.
区切り記号でない連続([A,B|R],[A],[B|R]) :-
    \+(区切り記号(A)),
    区切り記号(B),!.
区切り記号でない連続([A|R1],[A|R2],R) :-
    \+(区切り記号(A)),
    区切り記号でない連続(R1,R2,R).