問題タブ [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.
lisp - 通常次評価を使用するSchemeインタープリターはありますか?
コンピュータプログラムの構造と解釈の演習を通して、私はゆっくりと自分の道を進んできました。セクション1.1.5では、適用評価と通常順序評価について説明し、その後、このトピックがテキストで何度か取り上げられています。インタープリターは適用順序評価を使用するためdisplay
、コードにデバッグステートメントを挿入するだけで、それがどのように機能するかを正確に確認できます。通常の順序の評価でも同じことができると理解するのに役立ちます。
適用順序ではなく通常順序評価を使用して実装されたScheme(またはLisp)インタープリターを知っている人はいますか?
アップデート:
これは、SICPで提供されているものから変更された短い例です。add
引数を出力するための独自のプロシージャを定義square
し、本のプロシージャを使用します。
(square (add 1 2))
ここで、適用順序評価を使用して短いプログラムを実行すると、の結果は1回だけ計算され、その後プロシージャ(add 1 2)
に渡されます。square
オペランド12
は、最終結果の前に1回出力する必要があります。これをインタプリタで実行して、これが発生することを確認できます。
ただし、通常の順序の評価を使用すると、単一のオペランドをプロシージャに(add 1 2)
コピーする必要があります。これは、として評価されます。オペランドは、最終結果の前に2回出力する必要があります。square
(* (add 1 2) (add 1 2))
12
これを通常の順序の評価を行うインタープリターで実行して、これが実際にどのように機能するかを確認できるようにしたいと思います。
lisp - SICPに関するラケット博士の問題
私はSICPを介して作業しています。現在、最初の章で、Racketに「プリミティブ」を再定義させるのに問題があります。たとえば、私は恣意的にできるはずであり(define + 5)
、それで問題ない、またはsqrt
手順を再定義する必要があるという印象を受けました。代わりに、私はこれを取得します:
私は現在R5RSに設定されている言語を持っていますが、SICPとの互換性の問題を処理するという印象を受けました。
scheme - スキームの「let」構文に問題があります
「コンピュータプログラムの構造と解釈」を行っていますが、演習の1つ(2.1)を実行するのに少し問題があります。R5RSモードのDrRacketでコーディングしています。
これが私のコードです:
DrRacketからのエラーメッセージは次のとおりです。
構文をめちゃくちゃにしたと思います。しかし、私はそれを修正する方法がわかりません。
scheme - SICP Accumulate function
In Structure and Interpretation of Computer Programs (SICP) Section 2.2.3 several functions are defined using:
Two examples that make use of this operate on a list of the fibonacci numbers, even-fibs
and list-fib-squares
.
The accumulate, filter and map functions are defined in section 2.2 as well. The part that's confusing me is why the authors included the accumulate
here. accumulate
takes 3 parameters:
A binary function to be applied
An initial value, used as the rightmost parameter to the function
A list to which the function will be applied
An example of applying accumulate to a list using the definition in the book:
Since the third parameter is a list, (accumulate cons nil some-list)
will just return some-list
, and in this case the result of (filter pred (map op sequence))
is a list.
Is there a reason for this use of accumulate
other than consistency with other similarly structured functions in the section?
algorithm - ミラーラビンで混乱
私自身の演習として、ミラーラビン素検定を実装しています。(SICPを介した作業)。私はフェルマーの小定理を理解し、それをうまく実行することができました。ミラーラビン素検定で私がつまずくのは、この「1modn」ビジネスです。1 mod n(nはランダムな整数)は常に1ではありませんか?ですから、整数値を扱うとき、私の考えでは「1 mod n」は常に1であるため、「nを法とする1の自明でない平方根」が何であるかについて混乱しています。私は何が欠けていますか?
lisp - SICP 3.2、評価の環境モデルでは、環境は最初は最初のフレームと同じですか?
The Structure and Interpretation of Computer Programs part 3.2では、「環境」は「一連のフレーム」として定義されています。しかし、私が見る限り、この本は環境とフレームの違いについてこれ以上議論していません。また、本の図面は小さくて 2 次元であり、別の完全な図面を除いて時間の進化を容易に示すことができないため、環境の図面はそれらをフレームと混同しているのではないかと思います。
では、作成時の環境を最初のフレームと同じであると考えるのは正しいでしょうか? そして、環境で何らかの変更が発生すると (既存のバインディングが変更され、新しいバインディングが作成された)、環境はフレームのシーケンスに新しいフレームを追加しますか? その理解が正しくない場合、環境とフレームの違いは正確には何ですか?
助けてくれてありがとう!
lisp - SICP、Scheme、DrRacket質問:タイマー/プロファイラー機能?
私は現在、演習1.22を実行しようとしています。これには、システムが実行されているミリ秒数を返すランタイムと呼ばれる関数が必要です。しかし、私の環境(R5RS)にはこれがないようです。時間、current-milliseconds、current-inexact-millisecondsなどもありません。
関数のプロファイルを作成するために、どの関数にアクセスできますか?経過したミリ秒数、マイクロ秒数などを返す関数はどれですか?もちろん、私は利用可能な最高精度のタイマーを好みます。
scheme - Common Lisp の *print-circle* に相当するものは Scheme にありますか?
私はScheme (SICP演習3.23)でdequeに取り組んでおり、テストしたい単純な二重リンクリストの実装を持っていますが、循環リストを印刷する方法を見つけることができないようですスキーム (mit-scheme および mzscheme/racket)。
CL には、この種のフラグprint-circleがありますが、Scheme に同等のものはありますか? 「with-output-to-truncated-string」を試しましたが、Macports から入手した mit-scheme のビルドでは利用できないようですが、そうあるべきだと思いますか? REPLでこの手順を取得する方法はありますか?何かを含める必要がありますか?
http://sicp.ai.mit.edu/Fall-2003/manuals/scheme-7.5.5/doc/scheme_15.html
ありがとう!
algorithm - 平均減衰が固定小数点計算機の収束を魔法のようにスピードアップするのはなぜですか?
私はSICPを読んでおり、著者は関数の不動点を計算する際の平均減衰の手法について詳しく説明しています。関数の振動を減衰させるために、特定の場合、つまり平方根が必要であることy = x/y
は理解していますが、不動点計算関数の収束を魔法のように助ける理由はわかりません。ヘルプ?
編集
明らかに、私はこれをいくらか考え抜いてきました。関数をそれ自体で平均化すると、繰り返し適用すると収束が速くなる理由に頭を悩ませているようには思えません。
algorithm - 連分数が適切に近似されないのはなぜですか?
より多くのSICPを読んで、私は演習1.3.8で立ち往生しています。私のコードは1/phiを近似するために正しく機能しますが、e-2を近似するためには機能しません。
e-2で.7blahblah blahを取得する代わりに、.5blahblah何かを取得しています。理由がわかりません。「eulers-e-2」関数で「d」が正しく定義されていると確信しています。
編集:みんなありがとう、私はそれを逆に計算していました。これが修正されたコードです。