Scheme 为什么我会有身体错误?

Scheme 为什么我会有身体错误?,scheme,racket,Scheme,Racket,每次运行这段代码时,我都会收到错误消息:“define:函数体只需要一个表达式,但找到了一个额外的部分。”我一次又一次地尝试修复这个问题,但没有找到解决方案。有人知道我该怎么修吗?对不起,代码太长了,我想我应该把它全部包含进去,否则就没有意义了。谢谢 (define MT (empty-scene 50 50)) ; A Polygon is one of: ; – (list Posn Posn Posn) ; – (cons Posn Polygon) ; A NELoP is one

每次运行这段代码时,我都会收到错误消息:“define:函数体只需要一个表达式,但找到了一个额外的部分。”我一次又一次地尝试修复这个问题,但没有找到解决方案。有人知道我该怎么修吗?对不起,代码太长了,我想我应该把它全部包含进去,否则就没有意义了。谢谢

(define MT (empty-scene 50 50))

; A Polygon is one of: 
; – (list Posn Posn Posn)
; – (cons Posn Polygon)

; A NELoP is one of: 
; – (cons Posn empty)
; – (cons Posn NELoP)

; Polygon -> Image 
; adds an image of p to MT
(define (render-polygon p)
  (local 
    [;Polygon -> Posn
     ; extracts the last item from p
     (define (last p) 
       (cond
         [(empty? (rest (rest (rest p)))) (third p)]
         [else (last (rest p))]))]
    [;Image Posn Posn -> Image
     (define (render-line im p q)
       (add-line
        im (posn-x p) (posn-y p) (posn-x q) (posn-y q) "red"))]
    [;NELop -> Image
     ;connects the posns in p in an image
     (define (connect-dots p)
       (cond
         [(empty? (rest p)) MT]
         [else
          (render-line
           (connect-dots (rest p)) (first p) (second p))]))])
  (render-line (connect-dots p) (first p) (last p)))
新代码(仍不工作):


您的
渲染行
表达式必须位于
本地
窗体内,而不是在它之后。此外,所有的
定义
都应该在
本地
中的一个子表单中,而不是每个子表单中。因此,它应该看起来像:

(local [(define (last p)
          ...)
        (define (render-line im p q)
          ...)
        (define (connect-dots p)
          ...)]
  (render-line ...))

此外,您的代码一点也不长(我看到一些超过100行的可怕问题)。感谢您发布代码,并提供足够的详细信息,以供我使用。:-)我做了这些更改(谢谢,我错过了这么多错误!),但我仍然收到相同的错误消息确定,只是将其添加到原始问题中!哦,不,我刚刚意识到我没有正确地修复本地的子窗体。我现在就这么做了,非常感谢!
(local [(define (last p)
          ...)
        (define (render-line im p q)
          ...)
        (define (connect-dots p)
          ...)]
  (render-line ...))