Lisp vs. Python: Syntax

This entry was posted by on Tuesday, 24 April, 2007

http://amitp.blogspot.com/2007/04/lisp-vs-python-syntax.html。ひとことでまとめると「Lispのシンタックスは書き易いが読み難い」「Pythonのシンタックスは書き難い(=書くことが多い)が読み易い」という対比。 programming reddit でも
炎上しているもよう。

さて、 reddit の方の議論は追っていないのだけれど、著者の主張はよくわかるのだった。わたしも Lisp を知ったばかりの純真な学部生のころ、

(let ((x v1) (y v2)) v3)

みたいな構文で「なんで (x v1) が関数呼出じゃないの?」というところに気持ち悪さを感じたものだ(しかし考えてみれば「(x v1) が関数で (y v2) が引数」であるようにはまったく見えないのだから不思議だよね)。こういうグルーピングはほかにもたとえば cond がある。 (cond ... (f x) ...) というのがあったとき、 f が条件で x はその帰結かもしれない。

……というところで、実はこれは矢印letと同じような話だとわかっていただけると思う。大元の shiro さんが書いたLisp:S式の理由にあるように「括弧の意味の多重化」の問題だ。

ということはつまり、たとえば矢印つきletマクロを導入すれば、

(let x <- v1 y <- v2 in v3)

と書けて、多重化の問題はひとまず解決するってことだ。どうでもいいけど、これは個人的にはあるとかなり嬉しい部類の構文かも(エディタの支援があれば、だけど)。

でもまあ、わたしが独りでそういう記法を導入すればいいっていう話じゃないんで(他人のコードを読むといった話も絡んでいるので)、こういうマクロを導入すれば万事解決、やっぱ Lisp はすげえや、っていう話じゃないわけです。

さて、どうなんですかね。読みやすさと書きやすさのバランスはどう取るべきかと。

それにしても Lisp の人はこのテの話題に乗せられやすすぎという気がします(俺もな)

Comments are closed.