在 linux 和 Mac OS 上使用 DrRacket,以下代码给出了这个错误
*: expects type <number> as 1st argument, given #<undefined>
但是如果我在过程定义的开头取消注释(换行符),它可以正常工作,产生预期值 9。
#lang r5rs
(define (quadr x y)
;(newline)
(define xx (* x x))
(define yy (* y y))
(define xxyy (* xx yy))
(+ xx yy xxyy))
(display (quadr 1 2))
(newline)
这是 Racket 的方案解释器中的一个错误,还是指定的语言使得 (define ...) 的嵌套调用可能发生乱序?如果是后者,我在哪里可以找到语言规范的相关部分?
顺便说一句,我非常了解“让”结构,并且知道这不是定义此类过程的推荐方式。不过,我没想到会出现这个错误。