set!改变标识符的值。它本身的结果是<code>#<void></code>。
4.9.1分配的使用指导
有些时候使用set!是合适的,但是Racket不建议使用set!。下面是使用set!的指导方针。
- 现代编程语言中,使用参数比分配值更好
- 内部绑定比分配值更好
- 使用分配来累积迭代的计算结果不好,通过循环参数更好。
- 当状态对象是有必要的时候,实现set!是不错的选择。
其它情况也一样,一个不使用分配和突变的程序总是更好。但是,如果它代码更加可读或者算法更好,那就应该使用它。
4.9.2多值set!-values
(set!-values (id ...) expr)
这种形式和let-values一样活得多个表达式的结果,分配它们到对应的标识符。