テキストを整理するプログラム


※上記の広告は60日以上更新のないWIKIに表示されています。更新することで広告が下部へ移動します。

基本的なプログラム作法を学んだら、次は述語を使って実用的なプログラムを作ってみましょう。

今回はこのようなテキストがあったとします。
//in.txt
こんにちは
やあ
こんにちは
こんにちは
さよなら
今晩は
はじめまして
今晩は
今晩は
さようなら
やあ
さようなら
さようなら
はじめまして

よく見ると同じ文章が複数含まれています。
重複している文章が不要なので、ニ度入力された文章は無視して
別のテキストファイルに保存するプログラムを書いてみましょう。

test:-kanji_mode(_,on), tella('out.txt'),
	see('in.txt',S),
		repeat,gets(S,X,N),f(X),N=:=1,
	seen(S),told.

gets(S,L,N):-get0(S,X),gets(S,X,L,N).
gets(S,4,[],1):-!.  %for Linux
gets(S,26,[],1):-!. %for windows
gets(S,10,[],0):-!. %LF
gets(S,13,[],0):-!. %CR
gets(S,31,[],0):-!. %for az-prolog
gets(S,X,[X|L],N):-gets(S,L,N).

f([]).
f(A):-a(A),!.
f(A):-assert(a(A)),!,name(B,A),write(B),nl.

get0,see,seen,assert,nameは既に学習しました。
個々ではassertでa述語を作成して,
次にa(A)のAが入力データf(A)のAと同じであればwriteしないで
f述語を終わらせることによって2度同じ文を入力しないようにしています。
atomは65535文字まで対応可能です。(Ver7.09以前では255文字までしか対応していません。)