Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/drupal/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Racket 有没有办法禁用球拍的提升功能?_Racket_Hoisting - Fatal编程技术网

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

我用Racket教授(函数式)编程,我真的很喜欢初学者禁用功能的方式。然而,我在使用Racket时遇到的一个问题是,即使在最受限制的版本中,函数似乎也会被提升。现在有没有一种方法可以禁用球拍中的提升功能,这样下面的代码就会产生错误

(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
的这种特殊行为是允许他们这么做的原因。

这并不是真正的“提升”。我认为答案可能是
。我知道,最终这是一个需要养成的好习惯,但我注意到,错误是最能帮助学生的。。。仅仅过了一个星期,我就会解释:)