エラーになりそうでならないScheme式(といっても2つだけ)
その1
(define '(a b))
typoして、defineの次にシンボルを記入し忘れた式。
アッ間違ったエラーだっ!と思ってもこれはエラーにならない。
(define '(a b)) ↓ (define (quote (a b))) ↓ (define quote (lambda ((a b)))
ってことになって、quoteを再定義してしまう。
ていうか、(lambda ( (a b)))なんてボディーがないlambda式ありなの?って思うかもしれないけど、これもエラーにならない。
r6rsを斜めに読んだ感じでは、式が0個のボディーはありうるが、その場合の値については記載がないので undefined なんだなきっと。
gaucheだと ( (lambda (a1 ... an)) v1 ... vn) で n が返る。引数の個数。(begin)は #undef。
それから (lambda ( (a b)) ... vn) ってのもいいのか。うーこれは初見。
どう使うのかこれから勉強します。
その2
(begin 1 2 . (3 4))
間違って "." いれちゃった!シンタックスエラーだよねこれ!
とか思ってもこれはエラーにならない。
(begin 1 2 . (3 4)) ↓ (begin . (1 . (2 . (3 . (4 . '()))))) ↓ (begin 1 2 3 4) ↓ 4
間違えて "." を入れ無ければ値は (3 4) のはずが、"." を入れてしまったがために値が 4 になってしまう。
そんな間違いふつーしねーよな。
いやなんとなく。