問題タブ [sicp]
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 - SICPからスキーム番号関数を呼び出すにはどうすればよいですか
SICP(例2.6)では、次の関数は「数字なしで通り抜ける」方法として説明されています。私はこれを理解しようとひっかきます。出発点として、これらの関数はどのように呼び出されますか?出力が1になるような方法で実際に適用できますか?(または他の番号?)
私の最初の試みは成功していません:
terminology - 「データは単なるダムコードであり、コードは単なるスマートデータ」とはどういう意味ですか?
私はちょうどコンピュータプログラムの構造と解釈のアイデアに出くわしました:
データは単なるダムコードであり、コードは単なるスマートデータです
私はそれが何を意味するのか理解できません。誰かが私がそれをよりよく理解するのを手伝ってくれる?
math - コンピュータプログラムの構造と解釈、どのレベルの数学能力が必要ですか?
残念ながら、16歳(GCSEレベル)から数学を勉強していません。現在、27歳のC#開発者です。コンピュータプログラムの構造と解釈(SICP)を実行しようとするのは、実りのない演習でしょうか?
読者にはどのような数学の基準が期待されていますか?
text - sicp セクション 4.1.6
内部定義に関する SICP のセクション 4.1.6 の内容を理解するのに助けが必要です。
相互再帰関数が定義されたときに発生する問題を理解しています。しかし、次のラムダ式を変換することでどのように解決されるのかわかりません
の中へ:
誰かがここで私を助けてくれますか? ありがとう。
c - 推奨される読書順序とその他の質問
StackOverflow Podcast のエピソード 57 の推奨事項に基づいて、「コンピューター プログラムの構造と解釈」、「C プログラミング言語」、「Unix プログラミング環境」、および「アルゴリズム入門」を購入しました。基本的なプログラミング スキルを向上させ、いくつかのオープン ソース プロジェクトに貢献し、将来の雇用の見通しを改善したいと考えています。選択したテキストの推奨される読む順序はありますか? また、書籍のどの特定の主題/セクションにもっと注意を払う必要がありますか? ありがとう。
scheme - 小さなSICP/スキームの質問(ローカル状態)
私は実際に楽しみのために本を読んでいますが、それは宿題と見なされるかもしれません。いずれにせよ、私はこの言語ではローカル状態変数にまったく慣れていません...たとえば次のコードを見てください。
このコードが1と0の間で交互になるのはなぜですか?この関数が呼び出されるたびに、countには0の値が与えられます。Pythonに相当するものは次のとおりです。
これは毎回同じものを返します。よくわかりません...
recursion - SICP の演習 1.6 の説明は?
私はちょうど SICP の作業を始めたところです (これはクラス用ではありません)。演習 1.6 で数日間苦労してきましたが、まったく理解できないようです。if
これは、Alyssaが に関して次のcond
ように再定義したものです。
彼女はそれをいくつかの単純なケースでうまくテストし、それを使って平方根プログラムを書き直しました (これは でうまくいきましたif
):
次に、「アリッサがこれを使用して平方根を計算しようとするとどうなりますか?説明してください。」という質問が表示されます。good-enough?
[必要に応じて、他の手順 ( 、など)を再現improve
させていただきます。お知らせください。]
これで、何が起こるかわかりました。値を返すことはありません。つまり、プログラムは無限に再帰します。なぜこれが起こるのか説明できません。if
との間に存在する微妙な違いが何であれ、new-if
私を逃れています。ありとあらゆる助けが大歓迎です。
racket - DrSchemeにファイルを含めるにはどうすればよいですか?
DrSchemeを使用してSICPを処理していますが、特定の手順(たとえばsquare
)が何度も使用されていることに気づきました。毎回書き直さなくても他のプログラムに入れられるように別のファイルに入れたいのですが、どうすればいいのかわからないようです。
私はもう試した:
これらの作品はありません。明らかに私はストローをつかんでいます-どんな助けでも大歓迎です。
computer-science - SICPの統合アルゴリズムでは不要と思われるケース
ここでSICPで説明されている統合アルゴリズムを理解しようとしています
特に、プロシージャ「extend-if-possible」には、右側の「式」がすでに何かにバインドされている変数であるかどうかをチェックするチェック(アステリックス「*」でマークされた最初の場所)があります。現在のフレーム:
関連する解説は次のように述べています。
「最初のケースでは、照合しようとしている変数がバインドされていないが、照合しようとしている値自体が(異なる)変数である場合、値がバインドされているかどうかを確認する必要があります。もしそうなら、その価値を一致させるために。一致の両方の当事者がバインドされていない場合、私たちはどちらか一方にバインドすることができます。」
しかし、これが実際に必要な場合は考えられません。
それが話しているのは、現在、次のフレームバインディングが存在する可能性がある場所だと思います。
次に、?zから?yへのバインディングを「extendIfPossible」するように求められます。
その「*」チェックが存在する場合、「?z」を「?y」で拡張するように求められると、「?y」はすでに4にバインドされていることがわかり、「?z」を「4」で再帰的に統合しようとします。これにより、フレームを「?z=4」で拡張します。
チェックを外すと、「?z =?y」だけでフレームを拡張することになります。しかし、どちらの場合も、?zがまだ他の何かにバインドされていない限り、問題は発生しません。
?zがすでに他の何かにバインドされている場合、コードは「*」とマークされた部分に到達しないことに注意してください(?zがすでに一致していたものと統合するためにすでに再帰しているはずです)。
よく考えてみると、「最も単純な」MGU(Most General Unifier)を生成するための何らかの議論があるかもしれないことに気づきました。たとえば、他の変数を参照する変数の数が最小のMGUが必要な場合があります...つまり、置換{?x =?y、 ?y = 4} ...しかし、このアルゴリズムがこの動作を保証するとは思わない。「(?x 4)」を「(?y?y)」と統合するように要求した場合は、それでも{?x =?y、?y=4}になります。そして、動作が保証できない場合、なぜ追加の複雑さがあるのでしょうか。
ここでの私の推論はすべて正しいですか?そうでない場合、正しいMGUを生成するために「*」チェックが必要な反例は何ですか?
math - I can't find my error in this Scheme program for calculate PI
I am doing a Monte Carlo experiment to calculate an approximation of PI. From SICP:
The Monte Carlo method consists of choosing sample experiments at random from a large set and then making deductions on the basis of the probabilities estimated from tabulating the results of those experiments. For example, we can approximate using the fact that 6/pi^2 is the probability that two integers chosen at random will have no factors in common; that is, that their greatest common divisor will be 1. To obtain the approximation to , we perform a large number of experiments. In each experiment we choose two integers at random and perform a test to see if their GCD is 1. The fraction of times that the test is passed gives us our estimate of 6/pi^2, and from this we obtain our approximation to pi.
But when I run my program I obtain values like 3.9...
Here is my program:
My interpreter is MIT/GNU 7.7.90
Thanks for any help.