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