ストリーム

「ストリーム」の編集履歴(バックアップ)一覧はこちら

ストリーム - (2014/05/07 (水) 13:08:35) の1つ前との変更点

追加された行は緑色になります。

削除された行は赤色になります。

ストリーム系述語 see/2,get0/2,tell/2,put/2   ファイルのオープン・クローズ、また、入出力に関する述語を説明します。 -see/2   seeは第一引数を入力ファイルとしてオープンし、そのストリーム値を第二引数の変数にユニファイする述語です。   このストリーム値を後述するget0などの第一引数に渡すと、指定ファイルからの入力が可能となります。   seeのあとは、入力終了後に必ずseenという述語にストリーム値を渡してクローズする必要があります。 -get0/2   get0はseeの第2引数に返されたストリーム値を渡すことで任意のストリームから読み込むことの出来る述語です。   入力値は1文字ずつ取り出され第二引数に文字コードで返されます。 -例 see,seen,get0 test:- kanji_mode(_,on), see('a.txt',S), repeat,gets(S,X,N),f(X),N=:=1, seen(S). f(X):-name(Y,X),write(Y),nl. gets(S,L,N):-get0(S,X),gets(S,X,L,N). gets(S,4,[],1):-!. %for Linux gets(S,26,[],1):-!. %for Linux 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). a.txt(事前に作成しておきます) 0123456789 あいうえお Hello 今日 -解説   testという述語は最初にsee述語でa.txtというテキストファイルを読み込んでいます。   次に使用されているrepeatという述語は、その述語以降でfailが起きた場合に、処理を繰り返す述語です。   ここでは、ファイルの終了フラグN=1が立てられるまで、failさせて繰り返す使い方をしています。   get0は読み込まれたファイルの値を1文字づつ取り出しています。   fという述語は自作の述語です。   ここでは単にgets述語で得られたjisコードを格納したリストをアトムに型変換して   write述語でインタプリタに出力しているだけの述語です。   最後にseenによって入力ストリームをクローズしています。   なお、この例では文字コードをWindows環境を想定して作られているため、環境が異なる場合には、   EOFや改行コードが異なる場合があります。 -実行してみましょう ?-test. 49 50 51 yes   aaa.txtの内容がget0で取り出された文字コードの形で出力されていることがわかります。 ---- -tell/2   tellは第一引数を出力ファイルとしてオープンし、そのストリーム値を第二引数の変数にユニファイする述語です。   このストリーム値を後述するputなどの第一引数に渡すと、指定ファイルへの出力が可能となります。   tellのあとは、必ずtoldという述語にストリーム値を渡してクローズする必要があります。 -put/2   putはtellの第2引数に返されたストリーム値を渡すことで任意のストリームに出力することの出来る述語です。   入力値はアスキーコードとして認識され、出力時には対応する文字が出力されます。 -例 tell,told,put test:- see('aaa.txt',S), tell('bbb.txt',S2), repeat,get0(S,X),put(S2,X),X=:=26, told(S2), seen(S). aaa.txt(事前に作成しておきます) 1 2 3 -解説   上記の例は最初にsee述語でaaa.txtというテキストファイルを読み込んでいます。   次にtellで出力先のファイルbbb.txtを指定しています。   そして、get0によって入力ファイルの値を取得し、putで出力ファイルへ書き込みを行っています。   以上の処理を入力値がファイルの最後(EOF)となるまで、repeatで繰り返しています。   最後にそれぞれ、toldとseenで出力ファイルと入力ファイルをクローズさせています。 -実行してみると、aaa.txtと同じ内容のbbb.txtというファイルが作成されます。 ---- **デバッグ用述語 trace/0 , spy/fy   実際のコーディングを行う際に便利なデバッグ関連の述語を説明します。 -trace/0   traceは実行することで、トレースモードを開始することの出来る述語です。   トレースモード中は、コールする全述語の「成功」「失敗」「エラー」等が画面に表示されます。 -例 tarace a. b. c. test:-a,b,c. 普通に実行 | ?-test. yes トレース開始 | ?-trace. yes debug mode on ||?-test. [1] 0 Try : test ? Match : test :- a, b, c. [2] 1 Try : a ? Match : a. [2] 1 Succ : a [2] 1 Try : b ? Match : b. [2] 1 Succ : b << LAST CALL >> [1] 0 Try : c ? Match : c. [1] 0 Succ : c yes LOOP = 5 トレース終了 ||?-nodebug. [1] 0 Try : nodebug ? << BUILTIN CALL >> yes debug mode off | -解説 trace実行前のtest述語の実行では、述語の実行結果のみが返ってきているのに対し、 trace実行後はtest述語内での各述語の実行結果についても表示されていることがわかります。 -spy/1   spyはトレース時に、引数で指定した述語に対して、他の言語で言うところのブレークポイントとして指定する述語です。   spyの引数で指定された述語をスパイポイントと呼びます。   spyを実行するとトレースモードに入り、その後、処理中にスパイポイントの含まれた述語を実行すると   スパイポイントの箇所からのデバックが表示されます。 -例 spy a. b. c. test:-a,b,c. bという述語をスパイポイントに指定 | ?-spy(b). yes debug mode on ||?-test. [2] 1 Try : b ? Match : b. [2] 1 Succ : b << LAST CALL >> [1] 0 Try : c ? Match : c. [1] 0 Succ : c yes LOOP = 5 -解説   前述したtraceの例と違って、spy(b)でスパイポイントに指定された、bという述語以降からデバッグが   表示されることがわかります。 なお、デバッガについての説明は、以下のサイトに詳細が書かれていますので、こちらもご参照ください Az-Prolog User's Manual Chapter7 デバッガ http://www.az-prolog.com ---- ***まとめ 今回は以下の事を学習しました。 ・入出力ストリームのオープン・クローズ ・デバッグ関連述語

表示オプション

横に並べて表示:
変化行の前後のみ表示: