#<Closure>
- метод реализации представления объекта процедуры.Если x
оценивает это, то (x ...)
вызывает эту процедуру.Например.(+ 2 3) ; ==> 5
, но + ; ==> #<Closure>
.(+
- примитив, поэтому он может отображаться по-разному, но это действительно не имеет значения. Вы не должны его печатать :))
Я вижу, что вы звоните (cubeiter improve x)
, но это не таккажется правильным, что guess
должна быть процедурой, так как начальный вызов проходит 1.0
, который является числом.Очевидно, что один из них не прав.Возможно, вы должны были позвонить improve
и получить результат, который будет передан cubeiter
?например.(cubeiter (improve ...) x)
Также у вас есть ошибка в abs
.(-x)
- это не то же самое, что (- x)
, что является сокращением для (- 0 x)
.Вы вызываете процедуру с именем -x
без аргументов.
Ошибка abs
заставляет меня думать, что вы, возможно, не тестируете части своего кода.Если это не так, у вас будут проблемы, как только код станет больше.При создании cubeiter
было бы неплохо знать, что используемые в нем процедуры работают и что ошибки, скорее всего, будут в cubeiter
, а не improve
, good-enough
или abs
.Весь смысл создания отдельных процедур состоит в том, чтобы иметь возможность тестировать части так, чтобы вы были уверены, что они работают, и чтобы вы перестали думать о его реализации при использовании его на более высоком уровне абстракции.