問題タブ [r7rs]
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 - Chibi Scheme - Simple define-library example not working
I wrote the following example, in an attempt to experiment with R7RS libraries in Chibi Scheme 0.5.3:
Unfortunately when executed, it generates an error about an undefined variable:
I must be making a simple mistake but don't see it. Any ideas?
scheme - ラケット/ベース名前空間
言語に何が含まれているかは誰でも知っていracket/base
ます。名前空間の定義を R7RS ドラフトと比較して、racket/base
Racket が Scheme とどのように異なるかを直接把握しようとしています。
scheme - (R7RS) スキームで最上位バインディングをオーバーライドできるのはいつですか?
今後の R7RS スキーム標準 (スモール ランゲージ)の現在のドラフトを読みましたが、トップレベル バインディングの再定義がエラーにならない条件がわかりません。
定義または設定が可能だと思います!プログラムのトップレベルで 2 回目に導入されたバインディング。しかし、外部ライブラリからインポートされたバインディングについてはどうでしょうか? これらのバインディングを標準でオーバーライドすることは可能ですか?
レポートの 26/27 ページには、次のように書かれています。
プログラムの最上位には、インポート宣言が含まれる場合もあります。ライブラリ宣言では、同じ識別子を異なるバインディングで複数回インポートしたり、define、define-syntax、または set! を使用してインポートされたバインディングを再定義または変更したりすると、エラーになります。ただし、REPL はこれらのアクションを許可する必要があります。
再定義は、インポートされたバインディングのライブラリで発生した場合にのみエラーになるということですか?
コンパイラが+がまだ組み込みの追加を意味するのか、それとも他のユーザー指定のエラーなのかがわからない場合、コンパイラによる最適化を禁止することを理解しています。しかし、この観点からすると、ライブラリ レベルでの再バインドの禁止を制限することは意味がありません。プログラムにインポートされたバインディングに対しても (少なくとも) 意味がある場合です。
PS: これは計画プログラムの環境に関するすべてなので、現在の環境を手に入れることができないため、環境は第一級市民ではないと言っているのは正しいですか? (これにより、コンパイルされたプログラムは、バインディングの選択された名前を忘れることができます。)
reflection - R7RS スキームの反射機能
プログラミング言語 Scheme に関する R7RS レポートでは、Scheme システムで Scheme コードを実行する 2 つの方法について説明しています。
1) レポートのセクション 5.1 で説明されているように、スキーム システムはプログラムを実行できます。
2) スキーム システムは、Scheme コードが対話的に解釈される read-eval-print-loop を提供できます。
私の質問は、Scheme コードを実行するこれら 2 つの方法が、R7RS レポートに含まれている内容を使用して、Scheme システム内にどのように反映されるかということです。
eval
実行中のSchemeシステム内でSchemeコードを実行するevalライブラリプロシージャがあり、eval
私が探しているもののように見えます。
ただし、プラグインできる唯一の保証された変更可能な環境は、 repl ライブラリ プロシージャeval
によって返される環境です。interaction-environment
ただし、これでは、REPL (上記のポイント 2) を確実にシミュレートすることはできません。これは、REPL がインポート フォームを許可するeval
ためです。
また、別の理由により、Scheme プログラム全体を ing するために対話環境を使用することもできませんeval
。通常は空ではありません。特に、(scheme base)
.
1)実行中のSchemeシステム内で実現するには、evalライブラリ手順environment
が有望に見えます(実行中のプログラムの一部である)ライブラリを事前にインポートできるからです。ただし、環境は不変であるためdefine
、環境内で s を評価することはできません。解決策は、実行するプログラムの本体をlambda
フォームでラップして、define
ローカル変数を定義することです。ただし、これも機能しません。lambda
フォーム内では、すべての定義が本体の先頭に来る必要があり (これは、Scheme プログラムのトップレベルには当てはまりません)、lambda
フォーム ライブラリ バインディング内では、レキシカルに上書きできます。トップレベルのバインディングでは不可能です。
Scheme はチューリング完全であるため、実行中の Scheme システム内で Scheme システムをシミュレートすることはもちろん可能ですが、eval
手順を使用するだけでそれが可能かどうか疑問に思っています。私が興味を持った理由の 1 つは、eval
(JIT コンパイラ バックエンドなどによって) 最適化される可能性があるため、この手順を使用すると、ネイティブに近い速度が得られる可能性があることです (単純なインタープリターを手動で作成する場合と比較して)。
module - Scheme ライブラリが *ロードされる* とはどういう意味ですか? Scheme ライブラリはいつロードされますか?
私は、アルゴリズム言語スキームに関する改訂7レポートを研究しています。私の質問は、セクション 5.6 ライブラリに関するものです。
このセクションでは、次のように述べています。
ライブラリがロードされると、その式はテキスト順に実行されます。ライブラリの定義がプログラムまたはライブラリ本体の展開された形式で参照される場合、展開されたプログラムまたはライブラリ本体が評価される前に、そのライブラリをロードする必要があります。この規則は推移的に適用されます。ライブラリが複数のプログラムまたはライブラリによってインポートされる場合、追加の回数ロードされる可能性があります。
これはどういう意味ですか?インポートされた識別子が実際に参照されている場合、またはライブラリが拡張されたプログラムまたはライブラリのインポートセットの一部である場合にのみ、ライブラリがロードされるということですか? 同じプログラムによってインポートされた他の 2 つのライブラリが同じライブラリを参照している場合、そのライブラリは 2 回読み込まれますか?それとも 1 回だけ読み込まれますか?
ライブラリのロードには、その式の実行による副作用がある可能性があるため、これらの質問に対する答えは私にとって重要だと思われます。また、3 番目のライブラリの内部グローバル変数をインポートする 2 つのライブラリを共有しますか?
私は chibi-scheme でいくつかの実験を行いました: プログラムごとに、chibi-scheme はすべてのライブラリを 1 回だけロードし、エクスポートされた識別子が実際に参照されていなくても。実際、これは賢明で簡単に実装できるもののように思えます。
PS: 仕様が少し曖昧だと思う点がもう 1 つあります。プログラムで、インポート セットが という名前の識別子をインポートするとどうなりimport
ますか? 直後の行(import ...)
がコマンドまたは定義 (インポートされた識別子の意味に応じてimport
) またはインポート セットとして解釈されることを意味しますか?
PPS: トップレベル プログラムで複数のインポート宣言を許可する理由は何ですか?
scheme - scheme r7rs-large 興味深いですが... まだ進行中ですか?
r7rs large の状況を調べようとしていますが、2013 年の話だけで、Scheme Reports ページなどに情報が見つかりません。Google で検索してもヒットしませんでした。
- それはまだ生きていますか?
- 情報はどこで入手できますか?
- 暫定的な日付はいつになりますか?
- 現時点での進捗状況は?
ありがとう。