Racket 有没有办法禁用球拍的提升功能?
我用Racket教授(函数式)编程,我真的很喜欢初学者禁用功能的方式。然而,我在使用Racket时遇到的一个问题是,即使在最受限制的版本中,函数似乎也会被提升。现在有没有一种方法可以禁用球拍中的提升功能,这样下面的代码就会产生错误Racket 有没有办法禁用球拍的提升功能?,racket,hoisting,Racket,Hoisting,我用Racket教授(函数式)编程,我真的很喜欢初学者禁用功能的方式。然而,我在使用Racket时遇到的一个问题是,即使在最受限制的版本中,函数似乎也会被提升。现在有没有一种方法可以禁用球拍中的提升功能,这样下面的代码就会产生错误 (define (f x) (g x) ) (check-expect (f 3) 3) (define (g x) x ) 这种行为不是由提升功能引起的。这是由检查expect引起的。您可以将检查expect视为“向下提升” 如果用自己的函数替换che
(define (f x)
(g x)
)
(check-expect (f 3) 3)
(define (g x)
x
)
这种行为不是由提升功能引起的。这是由
检查expect
引起的。您可以将检查expect
视为“向下提升”
如果用自己的函数替换check expect
,则会出现正常错误:
g is used here before its definition
对于该计划:
(define (my-check-expect actual expected) ....)
(define (f x)
(g x))
(my-check-expect (f 3) 3)
(define (g x)
x)
如果您希望学生只在编写代码后编写测试,您可以制作一个教学包,提供新版本的check expect
然而,这是一个坏主意。设计配方教学生在编写代码之前编写功能示例/测试。
check expect
的这种特殊行为是允许他们这么做的原因。这并不是真正的“提升”。我认为答案可能是否
。我知道,最终这是一个需要养成的好习惯,但我注意到,错误是最能帮助学生的。。。仅仅过了一个星期,我就会解释:)