SchemeではファイルへのIOをファイル記述子を直接扱うのではなくポートというもので扱う。 ポートは入力や出力を行うためのもの。
https://www.gnu.org/software/guile/manual/html_node/Ports.html
ファイルに書き込み
ファイルを作成して文字列をファイルに書き込む。 open-output-file関数を用いてファイルを新規作成し display関数を用いてファイルに書き込む。 最後にclose-file関数でポートを閉じる。
(let ((p (open-output-file "foo.txt")))
(display "Hello, world!\n" p)
(close-port p))
foo.txtというファイルが新しく作成され、次のような中身になる。
ファイルの読み込み
先程作成したfoo.txtを読み込むにはopen-input-file関数を用いる。 今回はテキストの読み込みなのでtextual-ports::get-string-all関数を用いる。
(let ((foo (open-input-file "foo.txt")))
(get-string-all foo)
(close-port foo))
これによりfoo.txtの内容を読むことができる。
参考
- https://www.gnu.org/software/guile/docs/docs-1.8/guile-ref/Reading.html
- https://www.gnu.org/software/guile/manual/html_node/File-Ports.html
- https://www.gnu.org/software/guile/manual/html_node/Ports-and-File-Descriptors.html
- https://www.gnu.org/software/guile/manual/html_node/Ports.html
- https://www.gnu.org/software/guile/manual/html_node/Ports.html#Ports
- https://www.gnu.org/software/guile/manual/html_node/Processes.html
- https://www.gnu.org/software/guile/manual/html_node/SRFI_002d41.html
- https://www.gnu.org/software/guile/manual/html_node/Streams.html
- https://www.gnu.org/software/guile/manual/html_node/String-Ports.html
- https://www.gnu.org/software/guile/manual/html_node/Textual-I_002fO.html