ポート

Last-modified: 2023-09-20 (水) 20:32:37

Scheme言語と同じように、データの流れを抽象化したデータ型である。

infile (ファイル入力ポートを開く)

(prog (fip)
  (setq fip (infile "ファイルパス"))
  (unless fip (return)) ; ファイルを開けなかった場合
    :
  (close fip)
)

outfile (ファイル出力ポートを開く)

(prog (fop)
  (setq fop (outfile ファイルパス))
  (unless fop (return)) ; ファイルを開けなかった場合
    :
  (close fop)
)

instring (与えた文字列をデータとする入力ポートを生成する)

Java 言語でいう java.io.ByteArrayInputStream とか java.io.StringReader みたいなもの。

(prog (sip)
  (setq sip (instring "Hello, World."))
  (unless sip (return)) ; 文字列を開けなかった場合 → ほぼあり得ないですけど!
    :
  (close sip)
)

outstring

Java 言語でいう java.io.ByteArrayOutputStream とか java.io.StringWriter みたいなもの。書き込んだ文字列は getOutstring 関数で取り出します。

(prog (sop)
  (setq sop (outstring))
  (unless sop (return)) ; 文字列を開けなかった場合 → ほぼあり得ないですけど!
  (fprintf sop "Hello, ")
  (fprintf sop "World.")
  (display (getOutstring sop))
  (close sop)
)

flush (出力ポートバッファ内容を全て払い出させる)

C言語の標準入出力関数の flush に相当する機能。

(flush ポート)

close (ポートの閉鎖)

(close ポート)

入力ポート、出力ポートのどちらも指定できる。ただし、piport、poport、stdin、stdout、stderr を指定してはいけない。
gets (入力ポートから、一行ずつ文字列として取り出す)

(prog (fip buffer)
  (setq fip (infile "ファイルパス"))
  (unless fip (return))
  (gets buffer fip) ; 変数 buffer に 一行分の文字列を格納
    :
  (close fip)
)

portp (ポートであるか否かの判定)

(portp オブジェクト)

openportp (開かれたポートであるか否かの判定)

(openportp オブジェクト)

inportp (入力ポートであるか否かの判定)

(inportp オブジェクト)

outportp (出力ポートであるか否かの判定)

(outportp オブジェクト)

null

SKILL言語には eof オブジェクト は存在せず、入力ポートがファイルの終端に達している時に gets 関数を呼び出すと、nil が返される。そのため、ファイルの終端に達しているかいなかを判定するには null 関数を用いる。Scheme言語の eof-object? の代替である。

print、println

指定の出力ポートに文字列を出力する。出力ポートの指定は省略することができ、その場合は規定の出力ポート poport に出力される。

(print "Hello, World." 出力ポート)
→ 「Hello, World.」が既定の出力ポート poport に出力される。
(println "Hello, World." 出力ポート)
→ 「Hello, World.」と改行文字列が、既定の出力ポート poport に出力される。

pprint (pretty-print、整形出力)

データを適当な長さで改行して指定の出力ポートに出力する。出力ポートの指定は省略することができ、その場合は、既定の出力ポート poport に出力される。

(pprint '(1 2 3 4 5 6 7 8 9 10) 出力ポート)
→ (1 2 3 4 5
    6 7 8 9 10
   )

printf、fprintf、sprintf

(printf "%s ha neko dearu\n"  "wagahai")
→ 「wagahai ha neko dearu」が、既定の出力ポート poport に出力される。
(fprintf oport "%s ha neko dearu\n"  "wagahai")
; ※第1引数に代入する変数名を入れるのに注意!
→ 出力ポート oport に文字列 "wagahai ha neko dearu" が出力される
(sprintf buffer "%s ha neko dearu\n"  "wagahai")
; ※第1引数に代入する変数名を入れるのに注意!
→ 変数 buffer に文字列 "wagahai ha neko dearu" が代入される
メタ表現意味
%d整数型データ
%.nf実数型データ(n桁まで少数点表示)
%e実数型データ(10の累乗で桁を表示)
%g%f と %e で表示桁が少なくなる方の表示
%s文字列型データ
%Lリスト型データ(なんでも表示できる)

newline

改行文字列を指定された出力ポートに出力する。出力ポートの指定を省略することができ、その場合は、既定の出力ポートが使われる。

(newline 出力ポート)

または

(newline)

display

引数として与えたオブジェクトの印字名を指定された出力ポートに出力する。出力ポートの指定を省略することができ、その場合は、既定の出力ポートが使われる。

(display オブジェクト 出力ポート)

または

(display オブジェクト)

piport

現在の既定の入力ポートを格納した大域変数である。Scheme言語の current-input-port 関数の代替である。

poport

現在の既定の出力ポートを格納した大域変数である。初期値は Command Interpreter Window である。Scheme言語の current-output-port 関数の代替である。