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というファイルが新しく作成され、次のような中身になる。
Hello, world!
ファイルの読み込み
先程作成した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