在MIT-Scheme中绘制非常慢

时间:2015-10-04 16:51:32

标签: scheme drawing

我最近开始通过麻省理工学院的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 不能有效工作吗? 如果我以某种方式首先编译源代码会有帮助吗?

如果有人可以帮我解决这个问题会很棒。

0 个答案:

没有答案