問題タブ [lexical-scope]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
scope - 動的スコープの利点は何ですか?
私は、静的スコープが物事を行うための唯一の正しい方法であり、動的スコープが悪魔のツールであり、インタープリター/コンパイラーの不十分な実装からのみ生じることを学びました。
次に、 Common Lisp vs.Schemeの記事からこのスニペットを見ました:
Common Lispが「この点で勝つ」のはなぜですか?動的スコープで行うのが簡単なことは何ですか?私は本当にそれを必要とする/それを良いものとして見ることを正当化することはできません。
language-agnostic - 「レキシカル変数」という用語を時々耳にするのはなぜですか?
「レキシカル変数」という用語は、主にクロージャーのコンテキストで数回見たことがあります。Paul Graham は、Lisp に関する彼の著書で、 let 式を使用して定義された変数を参照する用語を使用しています。
レキシカルスコープは静的スコープの別名であることを理解しています。レキシカル変数は、プログラム単位の参照環境で見える単なる変数ですか?
このホリデー シーズンに、この言葉を使って友人や家族に感銘を与えたいと思っています。誰か助けてくれませんか?
lisp - Common Lisp の動的変数とレキシカル変数
Peter Seibel の「Practical Common Lisp」という本を読んでいます。
第6章の「変数」セクションの「レキシカル変数とクロージャー」と「動的変数、別名特殊変数」。 http://www.gigamonkeys.com/book/variables.html
私の問題は、両方のセクションの例が (let ...) がどのようにグローバル変数をシャドウできるかを示しており、実際には動的変数とレキシカル変数の違いを教えていないことです。
クロージャーがどのように機能するかは理解していますが、この例の let の何が特別なのかはわかりません。
ここでは特に何も起こっていないように感じます。barの外側のfooはグローバルxをインクリメントし、 letのbarで囲まれたfooはシャドウされたxをインクリメントします。大したことは何ですか?これが字句変数と動的変数の違いをどのように説明するのかわかりません。しかし、この本は次のように続けています。
では、これはどのように機能するのでしょうか。LET は、 xをバインドするときに、通常の字句バインディングではなく動的バインディングを作成することになっていることをどのように認識しますか? 名前が特別に宣言されているため、それは認識されます.12 DEFVAR および DEFPARAMETER で定義されたすべての変数の名前は、自動的にグローバルに特別に宣言されます。
「通常の字句結合」を使用してletがxを結合するとどうなるでしょうか? 全体として、動的バインディングと字句バインディングの違いは何ですか? また、動的バインディングに関してこの例はどのように特別なのでしょうか?
javascript - jQueryの最初に「window=this」があり、windowへの参照を高速化すると言うのはなぜですか?
jQueryのソースコードを開くと、この行が見つかります。
なぜ、そしてどのようにこのラインがスピードアップするのでしょうか?
compiler-construction - コンパイラが字句スコープを好むのはなぜですか?
レキシカルスコープはコンパイラにどのように役立ちますか? コンパイルや最適化に役立ちますか?
javascript - レキシカルスコープとは?
レキシカルスコープの簡単な紹介は何ですか?
lisp - Lisp 警告: xx は宣言もバインドもされていません。SPECIAL と宣言されているかのように扱われます。
私は Lisp に不慣れで、それに慣れるために簡単なプログラムをいくつか書いています。私が行っていることの 1 つは、階乗メソッドの再帰的で反復的なバージョンを作成することです。しかし、私は問題に遭遇し、それを解決できないようです。
Lispで同様のエラーを見ました : CHAR は宣言もバインドもされ ていませんが、OP が「入力ミス」を犯したことに気付いた以外は、実際には解決策に達していませんでした。REPL では setf 関数を使用でき、正常に動作します。また、emacs で LispBox を使用しています。提案をいただければ幸いです。
IT-FACT の WARNING : RESULT は宣言もバインドもされていません。SPECIAL と宣言されているかのように扱われます。
c# - C# ラムダ/匿名デリゲートでのレキシカル スコープ
単純な数式が ( and を使用checked
してcatch(OverflowException)
) オーバーフローするかどうかを確認したいのですが、毎回 try-catch ブロックを使用する必要はありません。したがって、式 (結果ではありません!) を functioncheckOverflow
に渡す必要があります。関数は、オーバーフローの場合に応じて動作します。
これは私が試みたものですが、ラムダ式の字句スコープがないように見えるため、機能しません。
そのための解決策はありますか?(.NET 2 で作業しますが、必ずしもそうとは限りません。)
programming-languages - レキシカルスコープはどのように実装されていますか?
数年前、私はプログラマー定義の関数を含む小さなドメイン固有言語のインタープリターを書き始めました。
最初に、単純なシンボル テーブルのスタックを使用して変数スコープを実装しました。しかし、今は適切なレキシカル スコープに移行したいと考えています (クロージャのオプションを使用)。レキシカルスコープの背後にあるデータ構造とアルゴリズムを説明できる人はいますか?