川合さんのエッセイ「Schemer's way」は面白く、とてもためになります。

ただ一点、フェアな議論なのか気になるところがありました。

多くの言語では、新しいオペレータを追加するのは言語そのものを拡張しなければならないだろう。例えばJavaを拡張してPerlの `x' オペレータを実装するには、構文規則から書き直さねばならない。既存のオペレータに新しい意味を追加するというメカニズムは、これもいくつかの言語では言語そのものに組み込みの機能となっている。 Lisp系の言語では、オペレータと関数呼び出しとの間に区別が無いため、オペレータの機能の拡張ということは議論にならない。新しいオペレータが欲しければ、あるいは既存のオペレータを拡張したければ、いつでも自分で書けるからだ。

Java には構文規則を変えなければいけない例を挙げているのに、Lisp では構文規則を変えなくてよい例を出しています。

僕も Lisper なので Lisp の肩を持ちたいところですが、Lisp だって前置構文の範疇を越えようと思うと、構文規則を変えないといけないのではないでしょうか？

ハッシュの演算子 たとえば、ハッシュ(hash)をキー(key)で検索した結果の値を知りたいとしましょう。JavaScript では、その演算子を "." で表します。 hash.key Lisp でこういう表現は、リードマクロを使っても、マクロを使っても無理でしょう。それで、括弧を使ってみることにします。 ( hash . key ) これだと単なるドット対になるので、演算子を => で表してみます。 ( hash => key ) これも無理ですね。Lisp でできるのは、演算子を一番前に置いた形になります。 ( => hash key ) 結局、ハッシュを検索する関数に => という別の名前を付けただけですね。