役に立つ Scheme のプログラムは基盤となるオペレーティングシステムとの しばしば対話を必要とします。
file-exists?
は引数の文字列の名前のファイルが存在するかどうかを
チェックします。delete-file
は引数のファイルを削除します。
これらの手続きは Scheme の標準にはありませんが、ほとんどの実装で
利用可能になっています。これらの手続きはディレクトリではないファイルに
対してのみ、確実に動作します(これらのディレクトリに対する挙動は、その
実装依存です)。
file-or-directory-modify-seconds
は引数のファイルあるいは
ディレクトリの最終更新時刻を返します。この時刻は1970年1月1日0時からの
秒数です。たとえば、
(file-or-directory-modify-seconds "hello.scm") => 893189629
なら、ファイル hello.scm
は1998年4月21日にさわられたことになります。
system
手続きは引数の文字列をオペレーティングシステムの
コマンドとして実行します。1 これはコマンドが
終了ステータス 0 を返し成功したら、真を返し、実行に失敗あるいは
0 以外の終了ステータスであった場合には、偽を返します。2 コマンドの実行によって生成される
出力はすべて標準出力に出ます。
(system "ls") ;現在のディレクトリの内容表示 (define fname "spot") (system (string-append "test -f " fname)) ;spot というファイルがあるかどうかチェック (system (string-append "rm -f " fname)) ;spot を強制削除
最後の2つのフォームは以下と同じです。3
(file-exists? fname) (delete-file fname)
getenv
手続きはオペレーティングシステムの環境変数の設定を返します。
4
(getenv "HOME") => "/home/dorai" (getenv "SHELL") => "/bin/bash"
1 MzScheme は system
手続きを process
ライブラリ経由で提供しています。このライブラリをロードするには
(require (lib "process.ss"))
を使用してください。
2 (訳注) Gauche
では sys-system
を使います。sys-system
の返り値は、POSIX の
system()
の返り値の整数です。
3 (訳注) Gauche では、
delete-file
ではなく sys-remove
を使います。
4 (訳注) Gauche では sys-getenv
を使います。