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 関数の代替である。