問題タブ [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 - スキームでの配列表現
私は関数型プログラミングの分野の初心者で、Scheme の学習を始めたばかりです (Scheme は半関数型プログラミング言語ですが)。私は、Scheme で十分にサポートされているリストに関するチュートリアルをいくつか行いました。私は、Scheme が配列をいじることをサポートしているかどうか疑問に思っていました。
または、独自のデータ型を定義する必要がありますか? リストは帰納的に定義されたデータ型です。配列を新しいデータ型として定義する場合、帰納的に定義できますか?
助けてください。前もって感謝します。
乾杯
c# - C#に字句的にネストされた関数がないのはなぜですか?
なぜC#言語設計者はこのようなもののサポートを含まなかったのでしょうか(コンピュータープログラムの構造と解釈、第2版、p。30から移植):
data-structures - Lisp/Scheme における自己参照データ構造
Lispまたはスキームで自己参照データ構造(たとえば、サイクルを含むグラフ)を構築する方法はありますか? これまで考えたことはありませんでしたが、破壊的な変更を行う方法がないため、いじってみると簡単な方法を見つけることができません。これは関数型言語の本質的な欠陥にすぎないのでしょうか? もしそうなら、haskell のような遅延関数型言語はどうでしょうか?
scheme - なぜSchemeは一流の環境をサポートしないのですか?
私は SICP (Structure and Interpration of Computer Programs) を読んでいて、モジュラー コードを記述する方法として eval と組み合わせて使用することを示している "make-environment" という素晴らしい特別な形式を発見して本当に興奮しました (抜粋)。 「パッケージ」のセクション 4.3 から):
次に、それがどのように機能するかを示します
彼らの例では、私が望む使用法を正確に示しています-スキームで「OO」スタイルを実行するエレガントで最小限の方法です...それらは「タイプ」を「コンス」します。 「make-environment」特殊フォーム (つまり、vtable) と arg (「状態」) によって返されます...
明示的なコードやマクロを大量に書かなくても、Scheme で「シンボルによって」ポリモーフィックなディスパッチを行う方法としてまさに探していたものなので、とても興奮しました。
つまり、たとえば、異なるコンテキストで呼び出す2 つの関数を持つ「オブジェクト」を作成したいのですが、「car」と「cdr」でそれらを参照したくありません。両方とも宣言したいのです。それらを記号名で評価します。
とにかく、これを読んだとき、家に帰って試してみるのが待ちきれませんでした。
PLT スキームと Chez スキームの両方で次のことを経験したときの私の失望を想像してみてください。
SICP で参照されている「make-environment」はどうなりましたか? それはすべて非常にエレガントで、まさに私が望んでいるように見えましたが、最新のSchemeインタープリターではサポートされていないようです?
根拠は何ですか?「make-environment」の名前が違うだけですか?
後で見つけた詳細情報
私はオンライン版を見てみました:
http://mitpress.mit.edu/sicp/full-text/book/book-ZH-28.html#%_sec_4.3
私が読んでいたのはSICPの初版でした。第 2 版では、パッケージに関する議論が、非決定論的プログラミングと「amp」演算子に関するセクションに置き換えられたようです。
scheme - DrScheme で定数識別子を再定義するにはどうすればよいですか?
DrScheme を使用して、Scheme インタープリターを作成しています。Read Eval Print Loop を定義し、eval プロシージャを再定義しています。これは Chez Scheme のような他のスキームの実装では問題なく動作しますが、私は Chez Scheme でのコード編集が好きではないので、これには DrScheme を使用したいと考えています。
次のような定義を行うと: (define (eval exp env) (cond ...)) それは言う: define-values: cannot change constant identifier: eval
それをオーバーライドして、定数識別子を変更できるようにする方法はありますか? これを回避するために、すべての変数の名前を変更する必要はありません。
functional-programming - スキームでペアワイズ差を適切に計算するにはどうすればよいですか?
たとえば、数値のリストが与えられた場合、 x -1 = 0の(1 3 6 10 0)
場合、どのように差(x i --x i-1)を計算しますか?
(この例の結果は次のようになります(1 2 3 4 -10)
)
私はこの解決策が正しいことを発見しました:
ただし、柔軟性の低いソリューションではありませんが、よりエレガントなソリューションが必要だと思います。それはただ醜いです。
関数型プログラミングは初めてですが、コードに関する提案を聞きたいと思います。
ありがとう。
programming-languages - Lisp構文の修正
Lispの初心者である私は、Lisp構文を「修正」できるかどうか疑問に思っていますか?
一部の人々は、Lispの構文がその最大の強みの1つであると言います。私はこれをよく理解していません。
「明白な」括弧を空白、新しい線、インデントの組み合わせに置き換えることはできませんか?Pythonのように?
Lispコードで最もよく使われる文字は括弧のように見えます。それが本当かどうか疑問に思っていますが、本当なら、これは構文に冗長性があるという提案ではありませんか?
質問に対する簡単な答えはありますか?なぜこれほど多くの括弧がありますか?
例えば:
なぜだめですか:
たとえば、行末の括弧を閉じ、常に新しい行で開きます。1だけがあいまいになります-それは1または(1)です-しかし、例外を導入することができます-単一のトークンは「リスト化」されません。
これはうまくいくでしょうか?
編集:
lisp - let ステートメントの Lisp 評価
私は Scheme インタプリタを書いていますが、次のような有効な let ステートメントに直面しています:
私のインタープリターは、Scheme の純粋に機能的なサブセットのみを実装しているため、set! などの副作用はありません。純粋に関数型の言語で、上記のように let ステートメント内で複数の式を許可するのはなぜですか?
インタプリタを書く際に、let の最後の式以外を評価する必要がある理由はありますか? 評価された最後のステートメントの結果に影響を与えることはできなかったようです。
lisp - リストに 3 番目の項目があるかどうかを確認するにはどうすればよいですか?
2 つまたは 3 つの要素を持つリストを受け取る関数があります。
しかし、このコードは失敗します
(null? (caddr ls)) 式について。
私も試しました
しかし、それもうまくいきませんでした。3 番目の項目があるかどうかはどうすればわかりますか?