Lispが読みにくいのは括弧のせいだけじゃない
What makes Lisp difficult to read?
Lispの括弧過多な構文が読みにくい理由を、認知科学の知見から考察。人間の知覚には「ハードウェアアクセラレーション」があり、近接性や閉合性のゲシュタルト法則がコードの視覚的グループ化を左右する。Cスタイルでは括弧やカンマの配置がこれらの法則に従い、周辺視でも構造を把握しやすい。一方Lispは関数名が開き括弧の後ろに来るため、対応する括弧が離れ、ワーキングメモリへの負担が大きい。著者はこの理論を、より読みやすい構文設計の指針として提案する。
Lispの表記法はCの表記法よりも一般的でないため、プログラマーはそれに慣れていないだけだという主張がある。しかし、私はそれだけではないと信じている。
HNでの議論
81- pfdietz
Lispは読みにくくないので、この質問の意味が理解できない。
これはフランス語を知らない人が「フランス語の何が読みにくくしているのか?」と尋ねているようなものだ。
- tombert
ここで他の人たちが言っていることを繰り返すよ。Lispは実際には、客観的に見て「読みにくい」とは思わない。
他の言語とは違うから「難しい」と感じるだけで、その違いのいくつかは、言語を理解すればむしろ可読性を向上させると思う。例えば、どこでも括弧を強制的に使うことで、優先順位が決して曖昧にならないことが保証される。
- lukaszkorecki
Swiftのコードを一度も触ったことがない人にとって、Swiftのコードを読むのが難しいのと同じことだ。つまり、慣れ親しんでいないだけだ。
- groundzeros2015
不慣れさだよ。
- whartung
括弧は大きくて目をそらす字形であり、(訓練を受けていない目には)区切り文字として目立たない。
考えてみてほしい:
(defun split-line (line)
(remove-if #'(lambda (word) (string= word ""))
(split-sequence:split-sequence #\Space line)))
ここで、括弧以外にもっと「軽い」字形があったと想像してみよう。
.defun split-line .line,
.remove-if #'.lambda .word, .string= word "",,
.split-sequence:split-sequence #\Space line,,,
明らかにこれは()を.に置き換えた作為的な例だが、括弧がどれほど「重く」、目に映るものをどれほど支配しうるかがわかるだろう。
経験を積めば、括弧は消え去る。括弧が大きくて一般的であることが、本来以上に会話を支配してしまうのだ。