我只是想在set-car!
中使用set-cdr!
和racket
执行非常简单的代码,但我收到错误:expand: unbound identifier in module in: set-car!
和expand: unbound identifier in module in: set-cdr!
他们在racket
中定义了吗?有人可以帮忙吗?
答案 0 :(得分:24)
您需要导入mutable-pairs-6
,如下所示:
(require rnrs/mutable-pairs-6)
这些程序已移至其他模块,并重命名为mcons
,mcar
,mcdr
,set-mcar!
,set-mcdr!
,mlist
强调他们对可变数据进行操作,与不可变数据不同。
答案 1 :(得分:12)
ÓscarLópez的回答是正确的,但并没有解释为什么正常的对是不可变的。
在Racket(及其前身,PLT Scheme,从版本4开始)中,缺省单元格是不可变的。大多数Scheme程序永远不需要修改cons单元,并且使它们不可变允许许多优化。 (例如,list?
和length
都可以是常量时间。)
对于需要可变性的情况,有mpair(如上所述),更有用的是,有盒子。
答案 2 :(得分:2)
This article告诉我们他们为何从Racket中删除