1
在通過SICP與Steel Bank Common Lisp一起工作的過程中,我獲得了合理的成功,但是我已經遇到了「圖片語言」示例的障礙。以下似乎沒有寫入PPM文件,而我寫的其他旋轉和翻轉操作。我懷疑LAMBDA在標籤內部調用時不會返回一個函數?在LABELS中定義的Lambda不會創建函數嗎?不執行?
我已經M-x 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*))
功能測試和工作:INIT-BUFFER,變換畫家,MAKE-VECT,MAKE-FRAME,SEGMENTS->畫家,RGB-BUFFER-> PPM – SquareCrow 2012-03-24 16:03:01
你得到任何錯誤消息?你爲什麼不在你的'paint-'函數中使用'fr'? – Svante 2012-03-24 17:09:48
沒有錯誤。我沒有使用FR,因爲TRANSFORM-PAINTER返回一個將它作爲參數的函數。 – SquareCrow 2012-03-24 17:20:44