2017-11-12 12 views
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은 "아래쪽으로 끌어 올린 것"이라고 생각할 수 있습니다. 프로그램을 위해

g is used here before its definition 

:

당신이 당신의 자신의 기능을 check-expect를 교체하는 경우

, 당신은 정상 오류가

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

(define (f x) 
    (g x)) 

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

(define (g x) 
    x) 

당신이 학생들은 시험들은 코드 후 작성하려는 경우, 당신은 check-expect의 새로운 버전을 제공하는 teachpack을 만들 수 있습니다.

그러나 이것은 나쁜 생각입니다. 디자인 레시피는 학생들이 코딩하기 전에 기능적 예제/테스트를 작성하도록 안내합니다. check-expect의 이러한 특수 동작으로 인해 이러한 작업을 수행 할 수 있습니다.

+0

알았어, 결국 이것은 좋은 습관이다. 그러나 나는 학생들이 최선을 다해 도와 줄 수있는 오류가 있다는 것을 알아 차렸다. 나는 감기 설명을하기 불과 일주일 전이다. :) –