アカウント名:
パスワード:
より多くのコメントがこの議論にあるかもしれませんが、JavaScriptが有効ではない環境を使用している場合、クラシックなコメントシステム(D1)に設定を変更する必要があります。
コンピュータは旧約聖書の神に似ている、規則は多く、慈悲は無い -- Joseph Campbell
カッコだけでもなんとかならんもんだろうか (スコア:2, 興味深い)
済む話なのかもしれませんが,やっぱりあの
括弧の多さにはくらくらしてしまいます.
私は lisp といえば Emacs Lisp くらいなのですが,
(先輩はそれは lisp じゃないとか言ってたけど)
普段使いのツールを Python で書いてる立場から,
もし lisp の括弧の対応関係を,インデントで表現すれば,
それはただ見かけだけのことなのかもしれないけど
見やすくなるかもしれないなぁ,と思うのです.
が,S式を普段使いでがりがり書いてる人にとっては
「それをすてるなんてとんでもない!」なのかもしれません.
ホントのところ,やっぱりとことんカッコにはこだわって
いきたいのが lisper の信条なのでしょうか?
かといって自分も C/C++ 書くときは {} の使用に
何の疑問も持っていないのですが・・・
屍体メモ [windy.cx]
Re:カッコだけでもなんとかならんもんだろうか (スコア:0)
他の大抵の言語における「文法」とは、ちょっと違う気がします。
Lispのは、もうちょっとメタなんですよ。
あえて他の言語のと一番近いものをあげれば
「Lispの括弧」は、
「ほかの言語の空白(などの単語区切り)」のようなもの、だと思ったほうが近いと思います。
(普通の空白と違い、括弧の場合は「開きか閉じか」の区別が有るために、ずいぶんと雄弁ですが。)
空白そのものというよりは、
空白の前後にある2つの単語(あるいはそれを連ねて3つ以上の単語)
の組み合わせによって初めて意味を成す、という感じに。
Lispの括弧もちょうどそんな感じです。
Lispでは、括弧の組み合わせだけで制御構文なりなんなりが表現されるわけではなく、
括弧「と幾つかの単語の組み合わせ」(まくろ)で結果的に制御構文みたいなものが表現されることになります。
偉い先生によれば括弧とは
「そういえばそんなものもあったなあ。わはははは」
というものなんだそうです。
それはつまり、文法要素というよりはメタ文法要素であり、ちょっととんがった単語区切りである、という背景に拠るんじゃないかと思います。
余談ですが、Forth/PostScript系言語にはこの構文(のように見えるもの)のガイドとなる括弧のようなモノが何も無いので、正直つらいです。見慣れたパターンのコードなら出てくる単語(演算子など)の並び具合から意味が取れますが、規模が大きくなり複雑化してくると、どこでボタンの掛け違いをやらかしたのか調べるのが異様に面倒になる。「スタックの上げ下げの辻褄が取れてることを確認する演算子」みたいなものを作ってしまいたくなる。そして「それなんてLisp括弧?」とふと冷静になる俺ガイル。
>もし lisp の括弧の対応関係を,インデントで表現すれば,
Lisp(系)のifとかdefineとかの周囲にまとわり着く括弧をそのままインデントに置き換えることをちょっと想像してもらうとすぐわかるかと思いますが、
上述したように、普通の言語の括弧なりインデントなりと、Lispのそれとは、メタ度が一段ずれていますので、
少なくともLispの括弧の対応関係を直接インデントに置き換えると、
「全く無意味にしか見えないインデント」の山が発生することと思われます。
そして、じゃあ括弧幾つだったらどうインデントしたらいいのか?という法則性が見えるか、というと、それも無理でしょう。
どこで切るのが適切かは、結局は個々のマクロが決めているわけで、
普通の言語でいう「文法」はLispではマクロあたりに位置しており、一段ずれてるんですよね。
その普通の言語には存在しない「Lisp本来の意味での文法」つまり「括弧」という階層が存在し、またそれを読み書きすることが許されているために、Lispは強力無比です。
ただ、そのぶん、「普段使い」するにしては細かすぎるんですよね。
確かに切れ味のいい彫刻刀が1つあれば何でも切り刻み切り出せるでしょうけど、じゃあ彫刻刀でトンネル掘るのかといわれると困ってしまう。
>C/C++ 書くときは {} の使用に
Lispを知る遥か前にCを知りましたが、
少なくとも「文」と「式」の違いには辟易させられました。
最初から両方を統合してくれたらどれだけ嬉しかったか!と思ったものでした。
Re: (スコア:0)