質問: 普段、Lisp処理系としてRacketを利用することが多く、見よう見まねでスクリプトを書いています。その中で、Racketでは`[]`という括弧を利用することが多々あります。具体的には`let`と`cond`の中で使われますが、この括弧の挙動が漠然としていて、自分の中でモヤモヤしてしまいます。 具体的なコードを挙げると、下のようになります: ``` #lang racket (define (plus-one x) (let ([plus-one-x (+ x 1)]) plus-one-x)) (define (fizzbuzz x) (cond [(= (modulo x 15) 0) "FizzBuzz"] [(= (modulo x 3) 0) "Fizz"] [(= (modulo x 5) 0) "Buzz"] [else x])) ``` 具体的にDocumentも読んでみたのですが、自分の読解力だと、どのような挙動をするものなのか、いまいちピンと来ません。 この`[]`の挙動について、具体的にどのような役割と、挙動をするものなのでしょうか?
回答: > > When the reader encounters a `(`, `[`, or `{`, it starts parsing a pair or list; see Pairs and Lists for information on pairs and lists. > > > To parse the pair or list, the reader recursively reads data until a matching `)`, `]`, or `}` (respectively) is found, and it specially handles a delimited `.`. Pairs `()`, `[]`, and `{}` are treated the same way, so the remainder of this section simply uses “parentheses” to mean any of these pair. > > > マニュアルによれば`()`, `[]`, `{}`の意味上の違いはないとしています。括弧を書き分ける事で、対応関係を読み取りやすくなります。 括弧`[]`, `{}`については、パラメータ変更でその解釈を切り替えられます。(括弧`()`と同等として扱うか否か) > > If the `read-square-bracket-as-paren` parameter is set to `#f`, then when the reader encounters `[` and `]`, the `"exn:fail:read"` exception is raised. Similarly, if the `read-curly-brace-as-paren` parameter is set to `#f`, then when the reader encounters `{` and `}`, the `"exn:fail:read"` exception is raised. > > >