質問

私はSICPを通じて働いています。現在、最初の章では、「プリミティブ」を再定義できるようにラケットを手に入れるのに問題があります。たとえば、私はarbitrarily意的にできるべきであるという印象を受けていました (define + 5) そして、それは大丈夫です、または再定義します sqrt 手順。代わりに、私はこれを取得します:

define-values: cannot change constant variable: +

私は現在R5RSに設定されている言語を持っていますが、私はSICPとの互換性の問題に対処する印象を受けていました。

役に立ちましたか?

解決

たとえ可能であっても、そのような再定義は、システムがこれにどのように反応するかを本当に理解せずに行うべきではありません。たとえば、再定義する場合 +, 、他のコードが破損しますか?ラケットの場合の答えは「いいえ」ですが、これはあなたが本当に再定義することができないからです +: :代わりに、aを定義します 新着 +, 、コードのみを使用できます。

言語の選択に関しては、Rackets R5RSモードは非常に厳格なものであり、通常使用したいものではありません。のために 多くの よりSICPに優しい環境、Neil Van Dyke'sを参照してください SICPサポートページ 本のために特別に作られた言語を提供します。 (IIRC、それは本が披露するグラフィカルな言語さえ持っています。)

他のヒント

ここでRSAの例(SICPの一部)を通して作業しようとする問題に遭遇しました。
http://mitpress.mit.edu/sicp/psets/ps3/readme.html

これを機能させるために私はこれをしなければなりませんでした:

1)空白のファイルの上部にこれを追加して、最初のダウンロードを介して実行します。

#lang planet neil/sicp

そして、「実行」を打つ

2)DRRACKETの非常にユーザーフレンドリーな自動ダウンロードをお楽しみください。

3)そして、それがインストールされたら、drracketを閉じます。

4)再開し、言語リストを選択してSICP Planet 1.15を選択します。
(最初のダウンロードを実行するためにそれを行う以外に、私のために働くために宣言を追加することができませんでした。)

幸運を!

言語パネルでは、「初期バインディングの再定義を許可する」ことを無効にする必要があります。これにより、問題が修正されます。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top