2012-02-28 22 views
13

私はちょうどracketset-car!set-cdr!と非常に簡単なコードを実行しようとしていますが、私はエラーを得た:expand: unbound identifier in module in: set-car!expand: unbound identifier in module in: set-cdr!set-car!、set-cdr!ラケットでアンバウンド?

は、彼らがracketで定義されていませんか?誰でも助けてくれますか?

(require rnrs/mutable-pairs-6) 

これらの手順は、別のモジュールに移動された、彼らは変更可能なデータを操作することを強調することmconsmcarmcdrset-mcar!set-mcdr!mlistに改名:あなたはこのように、mutable-pairs-6をインポートする必要が

+0

あなたはどの言語を選択しますか?言語をR5RSに設定します。 –

+0

私は '#lang R5RS'を設定したとき、最初に' #lang racket'を持っています。 'モジュール言語:無効なモジュールテキスト標準モジュール名リゾルバ:コレクションが見つかりません:#<パス: (#<パス:/home/chengtie/.racket/5.1.1/collects#<パス:/ usr/share/racket/collects>) ' – SoftTimur

+6

' #lang r5rs'を使用してください - - 小文字。 (しかしr5rs言語を使っても楽しい経験はできません) –

答えて

20

、それらの不変の対応とは異なります。

+0

あなたのコメントをお寄せいただきありがとうございます... 'cadr'はどうですか? 'mcadr'は存在しないようです... – SoftTimur

+0

悲しいことに、これらの手続き(' mcadr'、 'mcdar'など)は存在しません。手でそれらの機能を実装する必要があります。 –

+3

自分で定義してください! '(mcadr(compose mcar mcdr)を作成してください)' –

12

ÓscarLópezの答えは正しいですが、なぜノーマルペアが不変であるのか説明しません。

ラケット(およびその前身、バージョン4以降のPLTスキーム)では、コンスセルはデフォルトでは不変です。ほとんどのSchemeプログラムはコンスセルを変更する必要はなく、不変であれば多くの最適化が可能です。 (例えば、list?lengthは両方とも一定時間にすることができます)

変更可能性が必要な場合は、mpair(前述のように)があり、より便利にはボックスがあります。

+6

[義務的な参照はこちら](http://blog.racket-lang.org/2007/11/getting-rid-of-set-car-and-set-cdr.html) –

2

This articleは、それらがRacketから削除された理由をお知らせします

関連する問題