当作者实现序列化程序的互斥体部分时,他们使用名为cell
的列表。但是这个列表只包含一个元素,为什么不使用一个变量呢?SICP 3.4中的互斥体的实现
5
A
回答
10
因为变量不是您可以传递给另一个函数的第一类值。在3.4中,作者实现了使用clear!
作为辅助函数的make-mutex
函数,该函数使用一个单元格。如果单元格由可变变量表示,那么clear!
必须在make-mutex!
内定义,以关闭该变量。帮助功能test-and-set!
也是如此。
他们也可以使用,比如一个盒子而不是一个cons cell。
5
如果使用变量而不是列表,则程序clear!
和test-and-set!
将不起作用,因为Scheme是按值传递的。