プログラミング言語 Scheme についてぼんやりと仕様 (R7RS) を眺めていてふと思ったことがある。
define-library
を解釈する時点ではライブラリは読み込まれていないのでこれは通常の構文よりもメタな存在だと考えられる。 define-library
以下の <library declaration>
部に現れることができるとされている begin
等の宣言も同様にメタな存在 (普通の構文としての解釈は行われない) だと考えていいのだろうか?
具体的に言えば以下のような書き方をしてもエラーではないのだろうか?
(define-library (foo) (export foo) (import (except (scheme base) begin)) (begin (define foo 'foo)))
Gauche や Sagittarius で試してみると通ることが確認できるが foment ではエラーになる。
仕様の 5.6.1 では
The
begin
,include
, andinclude-ci
declarations are used to specify the body of the library. They have the same syntax and semantics as the corresponding expression types.
とあるのだが define-library
の性質を考えると same syntax というのが字句的にマッチするという意味にもそうでないようにも思える。 あるいは未定義だと考えるべきなのだろうか。