問題タブ [chicken-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.
scheme - CHICKEN-Scheme でのコンパイル済みライブラリの動的ロード
可能であれば、CHICKEN-Scheme でコンパイルされたコードを動的にロードする最良の方法を知りたいです。API はload
、ソース ファイルのみをロードすると述べています。
具体的には、コードを動的にロードする際の私の目標は、以前に定義された関数を上書きできるようにすることです。つまり、ライブラリ 1 にあるものは、ライブラリ 2foo
の別のものに置き換えられます。foo
function - スキーム: Let から Lambda への変換
そのため、いくつかのコードを試して、letとlambdaの 2 つのスキーム表現方法を変更しようとしています。
私が持っているコードは次のとおりです。
最も外側のlet定義をラムダ形式に変更しようとしていますが、コードのネストされた性質のために少し混乱しています。私がこれまでにやろうとしたことは次のとおりです。
これは明らかに間違っていますが、さらに先に進む方法がわかりません...
scheme - 関数定義で無手続き呼び出し?
オンラインでSchemeの簡単な紹介を見つけましたが、この機能に少し問題があります。
呼び出してみると、次のようになります。
そのエラーはチキンスキームから来ています.Chezスキームでも同じ結果が得られています.
文字列をタイトルの大文字と小文字に変換し、以前に取得したエラー メッセージから、次のようにします。call of non-procedure: "Star Wars Iv: A New Hope"
scheme - Chicken コンパイラではパターン マッチング コンパイル エラーが発生するが、Chicken インタープリタではエラーが発生しない
パターン マッチングを機能させようとしていますが、コンパイラではなく Chicken インタープリターでしか機能しません。
インタープリターでの例を次に示します。
コンパイルされたバージョンは次のとおりです。
これは失敗します ( csc src/test.scm
):
私は何を取りこぼしたか?
compiler-errors - Chicken Scheme: ロードまたはコンパイル時に警告/エラー メッセージが表示されない
しばらくチキン スキームをいじっていましたが、何か変わったことに気付きました。次の単純なソース ファイルがあるとします。
これが機能しないことは (人間の Bean にとって) 明らかです。起動してcsi
この関数定義を手動で入力すると、次のメッセージが表示されます。
知っておくと便利です。大規模なプログラムを実行する前に、タイプミスを見つけるのは良いことです。csi
それでは、もう一度起動してload
、ファイルを試してみましょう。
出力:
また良い。csi
では、そのファイルで起動してみましょう!
ええと...エラーメッセージはどこに行きましたか? なぜそこにないのですか?さて、実際にコンパイルしようとすると文句を言うかもしれません...
いいえ。(f 2)
ファイルの最後に行を追加しても( f
-function が最適化されないようにするため) 、エラー メッセージや警告は表示されません。
なんで?インタープリター (または少なくともその手動load
部分) はこの問題にすぐに気付くことができますが、コンパイラーはそれができません。おかしなこと-no-warnings
に、コンパイラには引数があります。予想どおり、警告がないため何もしません。
私は何が欠けていますか?どうすれば修正できますか?それは修正できますか、それとも実際にプログラムを自信を持ってコンパイルする前にload
、関連するすべてのファイルを手動で手動で作成する必要がありますか?csi
function - スキームラムダ関数のデフォルト引数?
最近 ChickenScheme の使用を開始しましたが、デフォルトの引数 (指定されていない場合) を使用して関数を宣言したいと考えています。Racket のサイトでこの例を見つけました。Racket と ChickenScheme が異なることは知っていますが、基本的なことは同じだと思いました。
これは ChickenScheme インタープリターからのエラーです。
macros - Chicken Scheme マクロから他のマクロを呼び出すには?
Common Lisp からChicken Schemeに移行しようとしていますが、多くの問題があります。
define-syntax
私の現在の問題は次のとおりです:他のマクロを呼び出すマクロ (おそらく ? を使用) を作成するにはどうすればよいですか?
たとえば、Common Lisp では、次のようなことができます。
一方、Scheme では、同等のコードは機能しません。
マクロからマクロを呼び出すことはappend-to
できませんsomething-else
。append-to
「変数」が未定義であるというエラーが表示されます。
私が Google や他の情報源から収集したすべての情報によると、マクロは他のコードにアクセスすることなく、閉じた環境で評価されます。基本的に、組み込みの Scheme 関数とマクロを除いて、マクロが評価されるときは何も存在しません。er-macro-transformer
、syntax-case
(とにかくChickenでは非推奨になっています)、さらにはprocedural-macros
モジュールを使用してみました。
確かに、マクロの全体的な目的は、コードの繰り返しを避けるために、他のマクロの上に構築されることです。マクロを単独で作成する必要がある場合、それらはほとんど役に立たない、と私は考えています。
私は他のスキームの実装を調査しましたが、もう運がありませんでした。それは単にできないようです。
誰かがこれを手伝ってくれますか?