#:g1: srfi-7の紹介

Posted 2014-04-29 15:00:00 GMT

(LISP Library 365参加エントリ)

 LISP Library 365 の120日目です。

srfi-7とはなにか

 srfi-7は、SRFIで制定されているR5RS時代のフィーチャーベースの設定言語です。

パッケージ情報

パッケージ名srfi-7
SRFIページSRFI 7: Feature-based program configuration language

インストール方法

 Gauche/STKlosは組み込みで利用できるようになっています。
Chickenは、

$ sudo chicken-install srfi-7

等でインストール可能です。

試してみる

 (program...)の中に、requires、files、code、feature-cond等が記述できて、これを組み合わせてライブラリを読み込みます。
requiresは必要とするフィーチャー、filesはロードするファイル名の指定、codeは、設定時に実行するコード、featture-condは、フィーチャーによって実行するものを切り分けるためのcondになります。
下記のようなsrfi-7-test.scmと2.scmいうファイルがあったとすれば、

srfi-7-test.scm
(cond-expand ((or chicken gauche) (use srfi-7))
             (stklos (require "srfi-7"))
             (else))

(program (files "./2.scm") (feature-cond (chicken (code (format #t "chiken~%"))) (gauche (code (format #t "gauche~%"))) (stklos (code (format #t "stklos~%"))) (else)))

2.scm
(+ 1 1)
$ stklos -f srfi-7-test.scm
stklos
$ gosh srfi-7-test.scm                                              
gauche
$ csi -qb srfi-7-test.scm
chicken

のように利用できますが、srfi-7が予め利用できるかどうかと、その読み込み方法が処理系によって違ったりするので、cond-expandが必要になったりするようです。

まとめ

 今回は、srfi-7を紹介してみました。
可搬性を向上されるためのSRFIだったと思いますが、4つ位の処理系で試してみたものの、ちょっとしたスクリプトを読み込ませるのも、エラーが発生しないようにするのは結構面倒でした。
R5RS時代は、処理系をまたぐようなスクリプトetcの作成は、なかなか大変だったようですが、R7RS Schemeではライブラリのロードについてより可搬になるようです。

comments powered by Disqus