Работая через SICP со Steel Bank Common Lisp, я добился разумного успеха, однако наткнулся на загадку на примере «Picture Language».Кажется, что следующее не пишет в файл PPM, в то время как другие повороты и перевороты, которые я написал, делают.Я подозреваю, что LAMBDA почему-то не возвращает функцию, когда она вызывается внутри LABELS?
У меня уже есть Mx check-parens, и там нет ничего осиротевшего или, по-видимому, не в своем роде.
(defun below (painter1 painter2)
"Divides frame along 2nd axis and invokes a painter on each region"
(let ((split-point (make-vect 0.0 0.5)))
(labels ((paint-up (fr)
(transform-painter painter2
(make-vect 0.0 0.0)
(make-vect 1.0 0.0)
split-point))
(paint-down (fr)
(transform-painter painter1
split-point
(make-vect 1.0 0.5)
(make-vect 0.0 1.0))))
#'(lambda (frame)
(paint-up frame)
(paint-down frame)))))
(defun krest-below ()
"Tests BELOW on the KREST-SEGMENTS"
(init-buffer 400 400)
(funcall (below (segments->painter krest-segments)
(segments->painter krest-segments))
(make-frame (cons 0 0)
(cons 399 0)
(cons 0 399)))
(rgb-buffer->ppm "krest-below.ppm" *buffer*))