水島雄太のブログ

個人的かつ雑多なブログです。

Racketのdot記法を使う

Racketのdot記法は、基本的にリストの最後の要素の前に付きますが、 (1 . < . 2)と書くと、(< 1 2)等価に評価される*1同様にみなされるようです。

dot記法がペアを生成する(cons x y)の省略記法であることを考えると、 この記法は例外的に感じられます。

しかし、この記法を用いることにより、 中置記法っぽく、式を記述することが可能になります。 例えば、 (< 1 2)という式は (1 . < . 2)という表記をすることが出来るので 中置記法に慣れている方はこちらの方が見やすいのかもしれません。

試しにこの記法を使ってProjectEulerの第1問の解答を書きなおしてみました。

dot notation

しかしこれではいくら中置記法に近いと言っても、 かなり見にくくなってしまったように感じられます。

LISPの場合は、前置記法により、(= 1 1 1)(+ 1 2 3 4)といった、 任意の数の引数に対して、一つのオペレータを適用出来るという利点がありますが、 この場合その利点がなくなってしまいます。

<>といった比較関数、is-a?といった関数を使用時英語の語順に沿った評価順序*2式の構文にしたい場合に限定的に使用できるかもしれませんが、dot記法を使うと、スペースが余分に空いてしまいますし、 評価順序*3式の構文はLISPをしばらく使うだけで慣れによって全く気にならなくなるので、 これから使う機会はあまり無いように感じられました。

Pairs Lists and Racket Syntax

*1:コメント指摘により訂正

*2:コメント指摘により訂正

*3:コメント指摘により訂正