> >         ふつーの言語だと2重定義はエラーだし…             久野
> 
> S とか R とか平気で再定義できる言語って普通じゃないんですか?

2重定義と再定義はちょっと感覚的に違うような気がします。

Algol 系の 強く型付けされた、コンパイルされる言語でも、
なんていうんだろう、ネスト(?)の中では関数だろうが変数だろうが
再定義できる言語は多いですよね。
(C でさえ関数こそできないけど変数はできれ)

一方、2重定義は、同じレベルで再定義している、って
感じがします。lisp の toplevel でだけで考えてるって感じ。
それなら、Algol系でもエラーですし。

どちらにしても、そういう気がするってだけなので、
突っ込まないでください。

...

(c[ad]*r x) が読みにくくて嫌なら、
マクロを造るんですかね、って一瞬思ったけど、
それが優子な状況なら、
common lisp なら defstruct してしまうし...