set-car !, set-cdr!球拍没有束缚?

时间:2012-02-28 02:05:25

标签: scheme racket

我只是想在set-car!中使用set-cdr!racket执行非常简单的代码,但我收到错误:expand: unbound identifier in module in: set-car!expand: unbound identifier in module in: set-cdr!

他们在racket中定义了吗?有人可以帮忙吗?

3 个答案:

答案 0 :(得分:24)

您需要导入mutable-pairs-6,如下所示:

(require rnrs/mutable-pairs-6)

这些程序已移至其他模块,并重命名为mconsmcarmcdrset-mcar!set-mcdr!mlist强调他们对可变数据进行操作,与不可变数据不同。

答案 1 :(得分:12)

ÓscarLópez的回答是正确的,但并没有解释为什么正常的对是不可变的。

在Racket(及其前身,PLT Scheme,从版本4开始)中,缺省单元格是不可变的。大多数Scheme程序永远不需要修改cons单元,并且使它们不可变允许许多优化。 (例如,list?length都可以是常量时间。)

对于需要可变性的情况,有mpair(如上所述),更有用的是,有盒子。

答案 2 :(得分:2)

This article告诉我们他们为何从Racket中删除