2012-02-28 24 views
13

Sadece racket içinde set-car! ve set-cdr! ile çok basit bir kod yapmaya çalışıyorum, ancak ben hata var: expand: unbound identifier in module in: set-car! ve expand: unbound identifier in module in: set-cdr!set-araba !, set-cdr! raket içinde ilişkisiz?

onlar racket tanımlanmayan musunuz? Biri yardım edebilir mi?

+0

Hangi dili seçiyorsunuz? Dili R5RS olarak ayarlayın. –

+0

Başta #lang R5RS'yi ayarladığımda #lang racket'im var, bana bir hata veriyor: 'Modül Dili: geçersiz modül metni standart modül-ad çözümleyici: koleksiyon bulunamadı: # herhangi birinde: (# # ) ' – SoftTimur

+6

'#lang r5rs' - - küçük harf. (Fakat r5rs dilini kullanmak hoş bir deneyim için gitmeyecektir.) –

cevap

20

Bunu, mutable-pairs-6 ithal etmek gerekir:

(require rnrs/mutable-pairs-6) 

Bu işlemler farklı modül taşındı ve mcons, mcar, mcdr, set-mcar!, set-mcdr!, mlist onlar değişken veri üzerinde işlem vurgulamak için yeniden adlandırıldı değişmez meslektaşlarının aksine.

+0

Yorumunuz için teşekkürler ... peki ya ne? Görünüşe göre 'mcadr' mevcut değil ... – SoftTimur

+0

Ne yazık ki bu prosedürler ('mcadr', mcdar' vb.) yok, onların işlevselliğini elle uygulamak zorundasınızdır. –

+3

Kendinizi tanımlayın! '(mcadr (compar mcar mcdr) öğesini tanımlayın)' –

12

Óscar López yanıt doğru, fakat normal çiftleri değişmez neden açıklamıyor.

Racket olarak

(ve selefi PLT Planı, sürüm 4 beri), eksileri hücreler varsayılan olarak iletmenin. Çoğu Şema programları, hücrelerini değiştirmeye asla gerek duymaz ve değişmez olmaları birçok optimizasyona izin verir. değişebilirlik gereklidir durumlarda

, (belirtildiği gibi) mpair var (Örneğin, list? ve length hem. sabit bir zaman olabilir), ve daha anlamlı, kutular vardır.

+6

[Buradaki zorunlu referans.] (Http://blog.racket-lang.org/2007/11/getting-rid-of-set-car-and-set-cdr.html) –

2

This article neden bunların kaldırıldığını anlatıyor Racket

İlgili konular