我只是想与做的非常简单的代码set-car!
,并set-cdr!
在racket
,但我得到了错误:expand: unbound identifier in module in: set-car!
与expand: unbound identifier in module in: set-cdr!
它们不是定义的racket
吗?有人可以帮忙吗?
Ósc*_*pez 26
您需要导入mutable-pairs-6
,如下所示:
(require rnrs/mutable-pairs-6)
Run Code Online (Sandbox Code Playgroud)
这些程序被转移到一个不同的模块,并更名为mcons
,mcar
,mcdr
,set-mcar!
,set-mcdr!
,mlist
以强调它们对可变数据进行操作,不像他们的不可变.
Chr*_*ung 12
ÓscarLópez的回答是正确的,但并没有解释为什么正常的对是不可改变的.
在Racket(及其前身,PLT Scheme,从版本4开始)中,cons单元默认是不可变的.大多数Scheme程序永远不需要修改cons单元,并且使它们不可变允许许多优化.(例如,list?
并且length
都可以是恒定时间.)
对于需要可变性的情况,有mpair(如上所述),更有用的是,有盒子.