問題タブ [letrec]
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 - Letrec と再入可能な継続
次の式は 0 に評価されることを意図していると言われていますが、Scheme の多くの実装では 1 と評価されます。
これをどこから始めればよいかさえ、私にはわからないことを認めなければなりません。継続 と の基本は理解できましたcall/ccが、この表現について詳しく説明してもらえますか?
conditional-statements - ローカル バインディングを使用した cond
私の質問は、ネストされた if 条件をcond、ローカル バインディングを持つブランチを持つ単一の条件に書き換えることについてです。私はラケットに非常に慣れていないので、最初の一歩を踏み出したばかりなので、私の質問がばかげている場合は、寛大にしてください.
簡単に言えば、このタスクは、ベクトルを取り、その中の値を検索する関数を作成することです。ベクトルには、ペアと非ペアの混合物が含まれています。関心のある値は、ペアの車にある必要があります。
実用的なソリューションでは、ネストされた if で再帰ヘルパー関数を使用します
condよりコンパクトに見えるように書き換えたいと思います。以下のコードは可能な実装です。問題は、それ(vector-ref vec pos)
が数回計算されることです。これは、ネストされたifを使用した以前の実装のように、1回だけ計算されるように書き直したいものです
そして、これが私が達成した最大のものです: (vector-ref vec pos)test-expr での 1 つの呼び出しと、result-expr での別の呼び出し
eltest-expr と result-expression の間でさらに共有するにはどうすればよいですか? elそして、私はこの特定の cond-branch のローカルにとどまりたいと思っています。以下のコードは正しく動作しません。AFAIU、letrec式全体が cond の text-expr と見なされますか?
scheme - R6RSのletrec、letrec*とRacketのletrecの違いは?
と の両方が R6RS にありますがletrec、Racket にしかありません。これらの違いは何ですか?letrec* letrecletrec*
scheme - スキーム letrec 無限環境
私は現在、SICP の本の手順に従って、Scheme で metacircular evaluator を書いています。
演習letrecでは、次のように実装するよう求められます。
ただし、次のように式を評価すると、無限ループに入ります。
私は何かが恋しいですか?
scheme - 末尾再帰を理解する 2
もともと私は「末尾再帰ベクトルを理解する->リスト回答」という1つの質問を投稿しましたが、これは追加の質問です。スキームに関する私の一般的な理解は本当に漠然としています。だから私は今、さらにいくつかの質問があります:
Q2) 末尾再帰は、私を理解するのを非常に困難にします。彼らが末尾再帰を必要とする理由を理解し、基本的に反復を避けるためにそれを使用するので、ヘルパーを中間ルーチンとして使用します..各反復をスタックに入れるのを避けることができます....このようなもの。そして、次のような letrec/lambda 式:
行 Q2-2: なぜこれが「ローカル再帰的」なのですか? 「ローカル」は、中間ルーチンの再帰的なように聞こえます...ここでの中間は、私の理解を意味します..
[私の混乱] 末尾再帰は、プログラム全体の最後までそれ自体を反復 (呼び出し) すべきではありません。今までの私の理解に基づいて...ヘルパーはletrec式にカプセル化された中間ルーチンのためのものです..?.)ので、最後に自分自身を呼び出すだけです.(私の意味..: letrecの外..?).
scheme - letrec の混乱、Scheme
let、letrec、let* の違いに苦労しています...スキームは私の主要なプログラミング言語ではないため、私の記憶は長い間存在していません..私はこの機能を持っています..今、私はここで letrec と非常に混乱しています..これも再帰です。理解できます...しかし、このコードでは十分に接続できません..(再帰についてまだ混乱しているかもしれません)誰かがここでletrecが必要な理由を説明できますか
(編集済み)私が理解しているのは末尾再帰です
⇒【Q1】末尾再帰ですか?
⇒【Q2】では、末尾再帰は常にletrecを使うべきでしょうか?
この関数は、開始、終了の境界を持つ x、y のリストを返すため、インデックス i が境界内にあるかどうかをチェックし、そうであれば 6 行目を実行します。
→【Q3】では、line6は何をしているのですか?line6が届かない
ocaml - OCaml でリストの循環バージョンを作成する関数を作成するにはどうすればよいですか?
変更可能な参照に頼る必要なく、let rec を使用して無限の循環リストを作成することが可能です。
しかし、これと同じ手法を使用して、有限リストを受け取り、その無限循環バージョンを返す関数を作成できますか? 書いてみた
しかし、次のエラーが発生しました
エラー: この種の式は `let rec' の右辺として使用できません
lambda - ラムダを使用せずにローカルプロシージャをletrecの変数にバインドできますか?
スキーム初心者です。私は以前、letrec を使用し、ラムダを使用してバインドする際に、このようなプログラムを実行していました。
しかし最近、私たちの大学の評価機関が構造「ラムダ」の使用を許可していないことがわかりました。ラムダを使用せずに同様の問題を実行できる方法はありますか? 他の代替案を提案してください。
lambda - スキームで let をラムダに変換する
これは元の形式です:
そして私はletを変換しようとしています、これは私が試したことです:
これを修正する方法がわからないので、誰かが私が間違っていることを助けることができれば、大きな助けになるでしょう.