アカウント名:
パスワード:
より多くのコメントがこの議論にあるかもしれませんが、JavaScriptが有効ではない環境を使用している場合、クラシックなコメントシステム(D1)に設定を変更する必要があります。
未知のハックに一心不乱に取り組んだ結果、私は自然の法則を変えてしまった -- あるハッカー
マニュアルに書いてあることも。 (スコア:1)
逆に私は Emacs Lisp しか知らないので、へええ普通の Lisp って違うんだ、と参考になりました。
「正規表現」に関しては、Perl との比
Re:マニュアルに書いてあることも。 (スコア:2, 参考になる)
あとは,Emacs-Lispが動的スコープを採用していることも書いておいていただけるとうれしいですね(自分でやれといわれそうですが).Schem
動的スコープなくて実用可能? (スコア:1)
それにしても、「名前空間の分離」なんていう表現が出てくること自体、Lisp の本質を知らないんだなと言うのは間違っていますか。私も Lisp に詳しいというほどではありませんけど、Lisp は名前自体がオブジェクトであって、名前すら変更可能だった覚えがあるのですが、違いましたっけ。そんでもって、名前もといシンボルに対して関数なり値な
Re:動的スコープなくて実用可能? (スコア:4, 参考になる)
関数としての位置:Common-LispやEmacs-Lispなどでは,(a0 a1 a2 ... ak) という形の式において,a0(関数としての位置)にくるものは式ではなく,関数を表す表現のみです.これにたいして,Scheme(その他,MLやHaskellなど)ではa0にも式がきます.
名前とシンボル:名前の概念と(Lisp系言語におけるデータとしての)シンボルは区別して扱うべきです.例えばSchemeでは変数の値は名前とスコープから決まりますが,Lispの処理系の一部では,名前が表しているシンボルから決まるものもあります.
静的/動的スコープ:スコープが静的/動的であるとは,変数のとる値が,定義されている文脈できまるか,評価されている文脈できまるかを指しています.例えば
(let ((a 1)) (defun foo (x) (+ x a)))
と定義しておいて
(let ((a 2)) (foo 3))
という式を評価した結果は,Common-Lisp(静的スコープ)では4に,Emacs-Lisp(動的スコープ)では5になります.動的スコープはコンパイルするときにいろいろ面倒なことがあります.Common-Lispではspecial宣言で動的スコープを扱うこともできますが,Schemeでは基本的には静的スコープだけです.
Emacs-Lispが動的スコープを採用している理由ですが,動作環境をあらわす大域変数を多用するためだと,Stallman氏が何かのインタビューで答えていたと記憶しています.純粋な大域変数としての利用だけなら静的スコープでもいいのですが,letなどで部分的に動作環境を指定することができるのが便利なのかも知れません.
Re:動的スコープなくて実用可能? (スコア:2, 興味深い)
> 動作環境をあらわす大域変数を多用するためだと,
> Stallman氏が何かのインタビューで答えていたと記憶しています.
History of T [paulgraham.com]
によると、当時はdynamic scopeの方が速いと考えていたようです。