このディレクトリの索引

'PGMファイルの読み取り'(_入力ファイル) :- abolish(画像構造/2), raw_read_pgm(_入力ファイル). raw_read_pgm(_入力ファイル,_画像構造ならび) :- headerを読み取る(_入力ファイル,_headerの文字数), 画像データの読み込み(_入力ファイル,_headerの文字数,_画像データ), assertz(画像構造(画像データ,_画像データ)). headerを読み取る(_入力ファイル,_型,_矩形サイズ,_色の深さ,_ヘッダの文字数) :- open(_入力ファイル,read,Input), '型・矩形サイズ・色の深さを得る'(Input,_型,_矩形サイズ,_色の深さ,_ヘッダの文字数), close(Input). '型・矩形サイズ・色の深さを得る'(Input,_型,_矩形サイズ,_色の深さ,_ヘッダの文字数) :- get_line(Input,Line), '型・矩形サイズ・色の深さを得る'(Input,Line,[],0,_型,_矩形サイズ,_色の深さ,_ヘッダの文字数), '型・矩形サイズ・色の深さを定義する'(_型,_矩形サイズ,_色の深さ). '型・矩形サイズ・色の深さを得る'(Input,Line,[_色の深さ,_矩形サイズ,_型],_ヘッダの文字数,_型,_矩形サイズ,_色の深さ,_ヘッダの文字数) :- !. '型・矩形サイズ・色の深さを得る'(Input,Line,L1,_ヘッダの文字数_1,_型,_矩形サイズ,_色の深さ,_ヘッダの文字数) :- 'コメント行は無視して、_ヘッダの文字数だけ更新'(Input,Line,L1,_ヘッダの文字数_1,_型,_矩形サイズ,_色の深さ,_ヘッダの文字数),!. '型・矩形サイズ・色の深さを得る'(Input,Line,L1,_ヘッダの文字数_1,_型,_矩形サイズ,_色の深さ,_ヘッダの文字数) :- '型・矩形サイズ・色の深さを埋めていく'(Input,Line,L1,_ヘッダの文字数_1,_型,_矩形サイズ,_色の深さ,_ヘッダの文字数). 'コメント行は無視して、_ヘッダの文字数だけ更新'(Input,Line,L1,_ヘッダの文字数_1,_型,_矩形サイズ,_色の深さ,_ヘッダの文字数) :- sub_atom(Line,0,1,_,'#'), '改行を含むコメント行の文字数を求めて_ヘッダ文字数を更新する'(Line,_ヘッダ文字数_1,_ヘッダ文字数_2), get_line(Input,Line2), '型・矩形サイズ・色の深さを得る'(Input,Line2,L1,_ヘッダの文字数_2,_型,_矩形サイズ,_色の深さ,_ヘッダの文字数). '改行を含むコメント行の文字数を求めて_ヘッダ文字数を更新する'(Line,_ヘッダ文字数_1,_ヘッダ文字数_2) :- atom_length(Line,Length), _ヘッダの文字数_2 is _ヘッダの文字数 + Length + 1. '型・矩形サイズ・色の深さを埋めていく'(Input,Line,L1,_ヘッダの文字数_1,_型,_矩形サイズ,_色の深さ,_ヘッダの文字数) :- get_line(Input,Line2), atom_length(Line,Length), _ヘッダの文字数_2 is _ヘッダの文字数_1 + Length + 1, '型・矩形サイズ・色の深さを得る'(Input,Line2,_ヘッダの文字数_2,[Line|L1],_型,_矩形サイズ,_色の深さ,_ヘッダの文字数). '型・矩形サイズ・色の深さを定義する'(_型,_矩形サイズ,_色の深さ) :- assertz(画像構造(型,_型)), assertz(画像構造(矩形サイズ,_矩形サイズ)), assertz(画像構造(色の深さ,_色の深さ)). 画像データの読み込み(_入力ファイル,_ヘッダの文字数,_画像データ) :- open(_入力ファイル,read,Input,[type(binary)]), ヘッダ部分を空読み(Input,_ヘッダの文字数), 画像データ部分の読み取り(Input,_画像データ), close(input). ヘッダ部分を空読み(Input,_ヘッダの文字数) :- between(1,_ヘッダの文字数,N), get_byte(Input,_), N = _ヘッダの文字数,!. 画像データ部分の読み取り(Input,_画像データ) :- findall(C,(repeat,get_byte(Input,C),(C = -1,!,fail;true)),_画像データ). get_line(Input,Line) :- get_char(Input,A), get_line(Input,A,L), atom_chars(Line,L). get_line(Input,'\n',[]) :- !. get_line(Input,A,[A|R]) :- get_char(Input,B), get_line(Input,B,R).