問題タブ [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.

0 投票する
1 に答える
244 参照

compiler-construction - Schemeで`(begin)`の戻り値は?

(begin expr1 expr2 ...)すべての式を評価し、最後に評価されたものを返すことを知っています。

Chez Scheme では、beginso: のような式なしで使用できることがわかりました(begin)。私は勉強の一環として Chez Scheme を使用しています。コンソールに書き込むと(begin)、構文エラーは送信されず、取得したかのように何も表示されませんvoid

私の質問は、何が返されるのでしょうか?

実行して取得できるvoidオブジェクトだと思いました(void)。しかし、テストしたところ、そうではないことがわかりました。

受講しているコンパイラコースの一環として Chez Scheme を勉強していますが、特別な単語 を処理できるコンパイラの一部を実装する必要がありますbegin。したがって、なぜこれが可能であり、この関数が何を返すのかを知る必要があります。

編集:

このトピックに関するこのリンクを追加しています。答えを完全に理解できませんでした。さらに、彼は戻り値の型について言及していません。

0 投票する
0 に答える
73 参照

scheme - R6RS: 空のリストに適用された構文式フォームは、ラップされた構文オブジェクトを返しますか?

R6RS スキームで次の式を検討してください。

この式を Racket に入力すると、(ラップされた) 構文オブジェクトが返されます。一方、同じ式は Chez スキームで (アンラップされた) 空のリストを生成します。

どのシステムが R6RS に準拠しているのか (または、両方の動作が標準で許可されているのか) 疑問に思っています。R6RS の関連する段落は、入力の解析と出力の生成です。そこには、次のように書かれています。

構文によって生成された出力は、次の規則に従ってラップまたはラップ解除されます... パターン変数を含まない の任意の部分のコピーは、ラップされた構文オブジェクトです。

テンプレートに(syntax ())はパターン変数が含まれていないため、結果はラップされた構文オブジェクトになるはずであり、Racket は正しいと思われます。

一方、Chez Scheme の作成者である R. Kent Dybvig はこのsyntax-caseシステムの発明者の 1 人であるため、Chez Scheme が標準に厳密に従うことが期待されます。