1
Steel Bank Common Lispを使ったSICPの作業では、私は合理的な成功を収めましたが、私は "Picture Language"の例に悩まされました。以下は、PPMファイルに書き込むようには見えませんが、私が書いた他の回転や反転は行います。私はLAMBDAが内部で呼び出されたときに何らかの形で関数を返さないと思われますか?LABELS内で定義されたラムダは関数を作成しませんか?実行しませんか?
私はすでにM-xチェックパンフレットを持っていますが、何も孤立しているか、一見そこそこのものはありません。 Svanteのプロンプト私は答えは私がTRANSFORM-PAINTERによって返された関数は、実際funcallのでと呼ばれ、ラベルPAINT-UPとPAINT-DOWNがあったときにFRを渡されたことを確認する必要があることがわかったから
(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、TRANSFORM-画家、MAKE-VECT、MAKE-FRAME、の区分>画家、RGB-BUFFER-> PPM – SquareCrow
あなたがもらえますエラーメッセージはありますか?あなたの 'paint '関数に' fr'を全く使わないのはなぜですか? – Svante
エラーはありません。 TRANSFORM-PAINTERが引数として受け取る関数を返すので、私はFRを使用しませんでした。 – SquareCrow