【发布时间】:2013-09-03 19:06:13
【问题描述】:
在 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 ...) 的嵌套调用可能发生乱序?如果是后者,我在哪里可以找到语言规范的相关部分?
顺便说一句,我非常了解“let”结构,并且知道这不是定义此类过程的推荐方式。不过,我没想到会出现这个错误。
【问题讨论】:
-
不一定推荐在内部定义上使用
let。 Racket 程序员特别倾向于内部定义,因为#lang racket支持更多语法形式的内部定义。
标签: lisp scheme racket race-condition