問題タブ [syntax-object]
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.
scheme - スキームにおける構文オブジェクトの目的は正確には何ですか?
スキームをよりよく理解するために、Python で小さなスキームのような言語を書こうとしています。
問題は、私が構文オブジェクトに固執していることです。それらが何のためにあり、どのように機能するかを本当に理解していないため、それらを実装できません。
それらを理解するために、DrRacket の構文オブジェクトを少しいじってみました。
私が見つけたものから、評価することは評価することと#'(+ 2 3)
同じです。ただし、最上位の名前空間に'(+ 2 3)
レキシカル変数があり、その場合でも が返されますが、エラーがスローされます。+
(eval '(+ 2 3))
5
(eval #'(+ 2 3))
例えば:
(eval (top-sym))
、(eval (top-stx))
、および(eval (shadow-sym))
すべて return 5
、 while(eval (shadow-stx))
はエラーをスローします。それらのどれも戻りません6
。
私がよく知らなかった場合、構文オブジェクトの唯一の特別な点は (エラー報告を改善するためにコードの場所を保存するという些細な事実を除けば)、特定の状況でエラーをスローすることだけだと思います。対応するシンボルは、望ましくない可能性のある値を返します。
ストーリーがそれほど単純である場合、通常のリストやシンボルよりも構文オブジェクトを使用する利点はありません。
だから私の質問は: 構文オブジェクトを特別なものにするために欠けているものは何ですか?