2017-11-12 8 views
1

私はRacketを使って(機能的な)プログラミングを教えています。初心者のために機能が無効になっているのが本当に好きです。しかし、私がRacketに持っている問題の1つは、最も制限されたバージョンでも機能が吊り上げられているように見えるということです。今度は、ラケットで関数ホイストを無効にする方法があるので、次のコードでエラーが発生するでしょうか?ラケットの機能ホイストを無効にする方法はありますか?

(define (f x) 
    (g x) 
) 

(check-expect (f 3) 3) 

(define (g x) 
    x 
) 
+2

これは実際にはかなり「吊り上げる」わけではありません。 – pvg

+0

[変数と関数の定義の順序]の複製の可能性(https://stackoverflow.com/questions/19654973/the-order-of-variable-and-function-definitions) – pvg

+0

答えは「いいえ」だと思います。これをエラーにするオプションはありません。 – soegaard

答えて

2

この現象は、巻上げ機能が原因ではありません。これはcheck-expectによって引き起こされます。 check-expectを「下に上げた」と考えることができます。

独自の機能でcheck-expectを交換する場合は、通常のエラーを取得:あなたは学生が彼らだけのコードの後に​​テストを書きたい場合は、

(define (my-check-expect actual expected) ....) 

(define (f x) 
    (g x)) 

(my-check-expect (f 3) 3) 

(define (g x) 
    x) 

:プログラムの場合

g is used here before its definition 

check-expectの新しいバージョンを提供する教材を作ることができます。

しかし、これは悪い考えです。デザインレシピは、学生がコードを書く前に、機能的な例/テストを書くように教えています。 check-expectのこの特別な振る舞いは、それを可能にするものです。

+0

私は知っている、最終的にはこれは良い習慣ですが、私は気づきました。エラーが学生の恩恵を最大限に助けるのです...ホイストを説明する前に唯一の一週間です:) –

関連する問題