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

S式じゃない

多くの Scheme 処理系ではこんな式を受付ける。

(+ 1 2 . (3 4))

しかし、 R5RS にはScheme のプログラムがS式である (read で読める) とは明記されていないので未定義と考えられるのだそうだ。
規格に記述されている手続き呼出しの形式はあくまでも

(<operator> <operand1> ...)

なのである。
S式として (+ 1 2 . (3 4)) と (+ 1 2 3 4) が同じなのは Lisper にとっては常識以前の空気みたいなものだが、それ以前にそもそもS式ではないかもしれないなんて疑うのは難しいと思う。
eval はS式を受取るし、規格に明記されていないからと言って Scheme のプログラムがS式ではない可能性があるなんて主張はほとんどいいがかりにしか思えないのだが、規格というのはそういったいいがかりめいたものさえ入り込む余地がないほどに作り込まれていなければならないということなんだろう。 中の人も大変だ。
ちなみに、 R6RS ではちゃんと解決している。
Document ID: f1a2e5be74c4e807ec1da21c011574d0