Dr racket 定义了学生语言中的错误。定义:函数体只需要一个表达式,但发现了 3 个额外的部分
Dr racket define error in student language. define: expected only one expression for the function body, but found 3 extra parts
当我在 Dr Racket 中编写代码时,收到错误消息
unsaved-editor:8:2: define: expected only one expression for the
function body, but found 3 extra parts in: (define (improve guess x)
(average guess (/ x guess)))
但是这段代码可以运行在Racket或者repl.it.
我想知道为什么 Dr Racket 会出错,我的代码真的有问题吗?
我的代码是这样的:
(define (average x y) (/ (+ x y) 2))
(define (square x) (* x x))
(define (sqrt1 x)
(define (good-enough? guess x)
(< (abs (- (square guess) x)) 0.001))
(define (improve guess x)
(average guess (/ x guess)))
(define (sqrt-iter guess x)
(if (good-enough? guess x)
guess
(sqrt-iter (improve guess x) x)))
(sqrt-iter 1.0 x))
(sqrt1 9)
您的代码适用于 Scheme/Racket。但是 Student Language 是 Scheme 的一个子集,非常有限,因此对于初学者来说更容易。 如何设计程序 一书中也使用了它。您可以在 https://docs.racket-lang.org/htdp-langs/index.html.
上阅读更多关于学生语言(实际上有五种语言)的信息
在 define
的情况下有重要的限制:
- 函数体中只能有一个表达式。
- 在函数体中你只能使用表达式,不能使用定义(所以
define
里面没有 define
)。
要使您的代码适用于 学生语言,具体取决于 级别(初级、中级等),您可以:
- 对所有本地定义使用
letrec*
或 local
而不是 define
或
- 将
good-enough
、improve
和 sqrt-iter
定义为顶级函数。
当我在 Dr Racket 中编写代码时,收到错误消息
unsaved-editor:8:2: define: expected only one expression for the function body, but found 3 extra parts in: (define (improve guess x) (average guess (/ x guess)))
但是这段代码可以运行在Racket或者repl.it.
我想知道为什么 Dr Racket 会出错,我的代码真的有问题吗?
我的代码是这样的:
(define (average x y) (/ (+ x y) 2))
(define (square x) (* x x))
(define (sqrt1 x)
(define (good-enough? guess x)
(< (abs (- (square guess) x)) 0.001))
(define (improve guess x)
(average guess (/ x guess)))
(define (sqrt-iter guess x)
(if (good-enough? guess x)
guess
(sqrt-iter (improve guess x) x)))
(sqrt-iter 1.0 x))
(sqrt1 9)
您的代码适用于 Scheme/Racket。但是 Student Language 是 Scheme 的一个子集,非常有限,因此对于初学者来说更容易。 如何设计程序 一书中也使用了它。您可以在 https://docs.racket-lang.org/htdp-langs/index.html.
上阅读更多关于学生语言(实际上有五种语言)的信息在 define
的情况下有重要的限制:
- 函数体中只能有一个表达式。
- 在函数体中你只能使用表达式,不能使用定义(所以
define
里面没有define
)。
要使您的代码适用于 学生语言,具体取决于 级别(初级、中级等),您可以:
- 对所有本地定义使用
letrec*
或local
而不是define
或
- 将
good-enough
、improve
和sqrt-iter
定义为顶级函数。