Реализация мьютекса в SICP Раздел 3.4 - PullRequest
5 голосов
/ 19 декабря 2011

Когда авторы реализуют мьютексную часть сериализаторов, они используют список с именем cell. Но список содержит только один элемент, так почему бы просто не использовать переменную?

Ответы [ 2 ]

10 голосов
/ 19 декабря 2011

Поскольку переменная не является первоклассным значением, которое вы можете передать другой функции.В 3.4 авторы реализуют функцию make-mutex, которая использует clear! в качестве вспомогательной функции, которая принимает ячейку.Если бы ячейка была представлена ​​изменяемой переменной, тогда clear! нужно было бы определить внутри make-mutex!, чтобы закрыть эту переменную.То же самое касается вспомогательной функции test-and-set!.

Они также могли бы использовать, скажем, поле вместо ячейки с консом.

5 голосов
/ 19 декабря 2011

Если вместо списка используется переменная, процедуры clear! и test-and-set! не будут работать, поскольку схема передается по значению.

...