Приветствую ребята!
Начинаю потихоньку разбираться с лиспом.
Есть такой код:
(defun render (scene width height filename)
(let* ((image (make-instance 'zpng:png
:width width
:height height))
(image-data (zpng:data-array image))
(delta (* pi(/ (camera-fov (scene-camera scene)) 180.0)))
(maxx (tan delta))
(minx (- maxx))
(maxy (* maxx (/ (coerce height 'single-float) (coerce width 'single-float))))
(miny (- maxy))
(stepx (/ (* 2 maxx) (coerce width 'single-float)))
(stepy (/ (* 2 maxy) (coerce height 'single-float))))
(do ((y 0 (1+ y)))
((>= y height))
(do* ((x 0 (1+ x))
(x-coord (+ minx (* x stepx)))
(y-coord (+ miny (* y stepy)))
(ray-dir (make-vector 3 :data (make-array 3
:element-type 'single-float
:initial-contents (vector x-coord y-coord 1)))
(make-vector 3 :data (make-array 3
:element-type 'single-float
:initial-contents (vector x-coord y-coord 1)))))
((>= x maxx))
(setf (aref image-data y x 2) 255)))
(zpng:write-png image filename :if-exists :supersede)))
sbcl говорит в строке (do ((y 0 (1+ y))) и (do* ((x 0 (1+ x)) (1+ y) и соответственно (1+ x) не достижимы так-же как и 2 предпоследнии строки.
Точная ошибка:
note:
deleting unreachable code
--> +
==>
CLRT-SCENE::Y
Не пойму почему.