問題タブ [chez-scheme]
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.
compiler-construction - Schemeで`(begin)`の戻り値は?
(begin expr1 expr2 ...)
すべての式を評価し、最後に評価されたものを返すことを知っています。
Chez Scheme では、begin
so: のような式なしで使用できることがわかりました(begin)
。私は勉強の一環として Chez Scheme を使用しています。コンソールに書き込むと(begin)
、構文エラーは送信されず、取得したかのように何も表示されませんvoid
。
私の質問は、何が返されるのでしょうか?
実行して取得できるvoidオブジェクトだと思いました(void)
。しかし、テストしたところ、そうではないことがわかりました。
受講しているコンパイラコースの一環として Chez Scheme を勉強していますが、特別な単語 を処理できるコンパイラの一部を実装する必要がありますbegin
。したがって、なぜこれが可能であり、この関数が何を返すのかを知る必要があります。
編集:
このトピックに関するこのリンクを追加しています。答えを完全に理解できませんでした。さらに、彼は戻り値の型について言及していません。
scheme - R6RS: 空のリストに適用された構文式フォームは、ラップされた構文オブジェクトを返しますか?
R6RS スキームで次の式を検討してください。
この式を Racket に入力すると、(ラップされた) 構文オブジェクトが返されます。一方、同じ式は Chez スキームで (アンラップされた) 空のリストを生成します。
どのシステムが R6RS に準拠しているのか (または、両方の動作が標準で許可されているのか) 疑問に思っています。R6RS の関連する段落は、入力の解析と出力の生成です。そこには、次のように書かれています。
構文によって生成された出力は、次の規則に従ってラップまたはラップ解除されます... パターン変数を含まない の任意の部分のコピーは、ラップされた構文オブジェクトです。
テンプレートに(syntax ())
はパターン変数が含まれていないため、結果はラップされた構文オブジェクトになるはずであり、Racket は正しいと思われます。
一方、Chez Scheme の作成者である R. Kent Dybvig はこのsyntax-case
システムの発明者の 1 人であるため、Chez Scheme が標準に厳密に従うことが期待されます。