パスワードを忘れた? アカウント作成
この議論は賞味期限が切れたので、アーカイブ化されています。 新たにコメントを付けることはできません。

Emacs Lispあれこれ」記事へのコメント

  • 最初の「変数と関数の名前空間」なんてのは、マニュアル読めば書いてあることですし、Emacs Lisp 使っている人なら常識的なことです。わざわざコード読んで調べたみたいですけど、マニュアルをちゃんと読まなかったんですかね。

    逆に私は Emacs Lisp しか知らないので、へええ普通の Lisp って違うんだ、と参考になりました。

    「正規表現」に関しては、Perl との比
    • 関数と値の名前空間の分離は,古典的なLispを知っている人には今さらなのは確かですが,最近は大学などでSchemeを使って教育することが多いので,こうやって書いておいていただけるとありがたいです.シンボルの属性リスト(plist)なども含めて,Schemeで育った学生は案外知らないようですし.

      あとは,Emacs-Lispが動的スコープを採用していることも書いておいていただけるとうれしいですね(自分でやれといわれそうですが).Schem
      • 関数としての解釈と値としての解釈が同一なのは Scheme だけなのですか。知りませんでした。

        それにしても、「名前空間の分離」なんていう表現が出てくること自体、Lisp の本質を知らないんだなと言うのは間違っていますか。私も Lisp に詳しいというほどではありませんけど、Lisp は名前自体がオブジェクトであって、名前すら変更可能だった覚えがあるのですが、違いましたっけ。そんでもって、名前もといシンボルに対して関数なり値な
        • by moonbear (4602) on 2002年09月02日 17時22分 (#158366)
          名前空間:一般に名前空間とは,名前に対してどのような値(解釈)を取るかを決める割り当て表のことです.ここで話題になっている,(Common-LispやEmacs-Lispなどで)同じ名前が関数としての位置に出現するか,式として出現するかによって解釈のされかたが異なるという現象ですが,これは式の位置と式で名前空間が異なることを意味しています.

          関数としての位置: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などで部分的に動作環境を指定することができるのが便利なのかも知れません.
          親コメント

普通のやつらの下を行け -- バッドノウハウ専門家

処理中...