読者です 読者をやめる 読者になる 読者になる

Schemeでライブラリを定義するぞ

Schemeのr7rsにはライブラリを定義する構文がある。
例↓

(define-library (niyarin test)
    (import (scheme base))
    (export foo1 foo2)
    (begin 
      (define (foo1 a) (+ a 1 ))
      (define (foo2 a) (- a 1))))

Schemeのライブラリ名は、ライブラリを一意に判別するため、識別子と正の整数のリストを使う。
define-libraryでは、外側の環境へアクセスできないので、使いたい機能をimportする必要があり、また外側の環境で使う場合どの識別子を見られるようにするのかexportで指定する必要がある。
あとは、begin内にlibrary本体を記述すれば最低限使えるようになると思う。
define-library内では、例が使われたものの他にinclude include-ci include-library-declarations cond-expandが使える。

作ったライブラリを使うには、もちろんimportするだけでよい。
ただし、ライブラリ自体は現在の環境から見えるようにする必要があるので、外側のファイルに書いた場合なんかは、include、loadなどする必要がある。

(import (niyarin test) (scheme write))
(display (foo1 1));2

無事使えた。
以上。