我最近开始通过麻省理工学院的SICP课程,我在官方网站上找到here之一的旧作业时遇到了麻烦。
文件 drawing.scm 包含一个过程 draw-connected ,它接受一个数字作为参数并返回另一个函数。该函数依次采用曲线作为其参数(在这种情况下,曲线是根据给定的参数t返回特定点对象的任何过程)
(define (draw-connected n)
(define window (make-graphics-device #f))
(let ((1/n (/ 1 n)))
(lambda (curve)
(define (iter x-old y-old count)
(let ((t (* count 1/n)))
(let ((ct (curve t)))
(let ((x-new (x-of ct))
(y-new (y-of ct)))
(graphics-draw-line
window
x-old
y-old
(exact->inexact x-new)
(exact->inexact y-new))
(if (>= count n)
'done
(iter x-new y-new (+ count 1)))))))
(graphics-clear window)
(let ((c0 (curve 0)))
(iter (x-of c0) (y-of c0) 1)))))
我稍微修改了 draw-connected ,因此我可以更轻松地调用它(原来 window 未在过程中定义,但作为参数赋予它)。 现在,当我通过在edwin中的缓冲区中打开相应的.scm文件来调用此过程时,对其进行评估然后评估
((draw-connected 20) foo)
打开一个单独的窗口,在大约20秒的延迟之后,出现由 n 连接的绘图点组成的函数 foo 的粗略图形。对于更大的 n 值,这需要更长的时间。
这是正常的吗?只是 draw-connected 不能有效工作吗? 如果我以某种方式首先编译源代码会有帮助吗?
如果有人可以帮我解决这个问题会很棒。