問題タブ [r5rs]
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.
racket - R5RS スキームでの定義構文のポータブル ロード/インクルード?
DrRacket/plt-r5rs と Gambit/gsi の両方で動作するものを書こうとしています。
私が抱えている問題は(load "foo.scm")
、Gambit でブロックが読み込まれないことdefine-syntax
です。Gambit で使用(include "foo.scm")
すると機能しますが、DrRacket ではもちろん構文エラーが発生します。
移植可能な R5RS コードを記述できるように、これを解決する方法はありますか?
私が試したこと:
- への再定義
(include "foo.scm")
、(load "foo.scm")
およびその逆。問題: Gambit でマクロを再定義するのは違法です。 - 上記の再定義を
(if gambit ...)
. 問題: if (別の define 内でない限り) 内に define を置くことは違法です。 - 代わりに、ファイル名を含む文字列をライブラリ ファイルのインクルードに渡します。問題: Gambit のインクルードは、解釈が開始される前に発生するようです。
scheme - 要素のタイプを決定するためのリストの解析
リストを受け取り、リストの要素に基づいて適切な関数を適用する単純な再帰関数を作成しようとしています。入力時:
そのため、文字列が何であるかを確認し、それに応じて式を再帰的に解決します。
これは私が今持っているものです(プラスだけ):
これにより、エラーが発生します (入力 "(myfunct '(plus 4 5))":
エラーの理由を特定できません。説明/修正をお願いできますか?
編集:
で動作します:(myfunct '(plus (plus 4 5) 6)
ただし、それでも動作しません... (myfunct '(plus (plus 4 5) (plus 2 3)))
. 2 番目の引数は、void "()" として返され続けます。再帰ツリーを描画しましたが、そのエラーの理由がわかりません。何か案は?
EDIT 2: 最終的な有効な回答。なぜこれが機能し、他の機能が機能しないのか 100% 確実ではありません。その上の車は間違った値を返します。
scheme - スキーム R5RS: let 式の定義
私は、Scheme で独自の let 式をどのように定義するのだろうと思っていました (私はスキームに非常に慣れていません)。id が expr1 の値にバインドされ、expr2 で使用される (mylet id expr1 expr2) のようにしたい。私はそれが次のようなものになると思います:
しかし、それは機能していません。
やってみると
次のエラーが表示されます。
私は何を間違っていますか?
math - スキームでは、正確な(有理数)数を被除数と除数に分割するにはどうすればよいですか?
私が探している機能は次のようなものです:
RnRS、SRFI、またはカスタム実装で可能ですか?