2012-01-25 2 views
4

"어떻게하려면 디자인 프로그램 2 차 Ed"에서 연습을 통해 drracket을 사용하려고합니다.라켓/스킴 내에서 파일 포함하기

이의 연습의 수는 이전 질문에 구축, 내가 복사하고 몸을 붙여하지 않도록 가 질문에 대한 답변에서 나는 소스 파일을 포함시킬 매번 낡은 대답.

내 주요 질문은 : 어떻게해야합니까?

나는 문서를 통해 보면서 내가 원하는 것을 할 것 같다 include라는 방법을 발견,하지만 난 제대로 에게 그것을 사용하는 방법을 해결하지 못할했다.

예 - 나는 두 개의 파일이 있습니다 -이 컴파일과 잘 실행 한 기능이 포함되어

test.rkt :

(define (test) 1) 
(test) 

newtest.rkt을 - 나는이 파일을 싶습니다 test.rkt에 정의 된 함수를 사용할 수 있습니다.

(require racket/include) 
(include "test.rkt") 

(define (newtest) (* test 2)) 

나는 다음과 같은 오류 받기 컴파일하려고

:

module: this function is not defined 

(매우 유익하지 않습니다,하지만 그게 내가 주어진 해요 모든 정보의 ...)

어떻게 이 오류가 발생하지 않고이 첫 번째 파일을 포함시킬 수 있습니까? include 도 이와 같은 올바른 기능입니까, 아니면 내 접근 방식이 완전히 잘못 되었습니까?

답변

8

include 양식이 작동하지 않습니다. 언어가 "Beginning Student"또는 다른 언어 중 하나에 설정되어 있으면 DrRacket이 프로그램을 실제로 모듈에 포함시키기 때문입니다. 일반 텍스트 편집기에서 "test.rkt"을 열면이 내용을 볼 수 있습니다. #reader.... 비트는 모듈을 생성합니다. 그러나 다른 파일에 included이 오면 의미가 없습니다. 따라서 약 module에 대한 불평 오류.

불행히도 내가 말할 수있는 한 HtDP 언어에는 여전히 provide이 없으므로이 작업을 올바르게 수행해야합니다.

은 다른 파일과 같은 디렉토리에 "provide.rkt"라는 새 파일을 만듭니다

당신이 정말이 작업을 얻고 싶은 경우에

, 여기에 주위를 해킹하는 방법입니다. 이 파일 (및이 파일 만)을 편집하는 동안 DrRacket의 언어를 "소스에서 언어 결정"으로 설정하십시오. "provide.rkt"에 다음 두 줄을 넣어 :

#lang racket 
(provide provide) 

당신의 "test.rkt" 프로그램에 다음 줄을 추가합니다. (즉 단지가 내장 된 특수 형태 provide 제공하는 전체 라켓 언어를 사용하여 모듈을 선언합니다). (DrRacket 's Language가 "Beginning Student"로 다시 설정되어 있는지 또는이 언어를 사용하고 있는지를 확인하십시오.)

(require "provide.rkt") 
(provide test) 

지금 "test.rkt"test 기능을 내보내는 모듈입니다. (이 모듈은, 그냥 전에 수출하지 않았다 항상, 그래서 그것은 매우 유용하지 않았다.)

"newtest.rkt" 프로그램에 다음 줄을 추가합니다 :

(require "test.rkt") 

모든 것을 제공 가져 "test.rkt"에 의해 : 현재는 단지 test이지만 다른 것들을 추가 할 수 있습니다. 단지 provide이어야합니다.

+0

감사합니다. 시도해 보겠습니다. 그래서 나는 그것들을 사용하기 전에 모든 기능을 '제공'해야만합니까? 나는 언어를 가르치는 언어 대신 계획하기로 설정하는 편이 좋을까? –

+0

아니요, 다른 파일 (예 : 다른 모듈)에 표시하려는 기능 만 '제공'해야합니다. 그리고 아니, 그것은 아마도 교육 언어를 고수 할 가치가 있습니다. 우선, 테스트 프레임 워크 (커버리지 검사 포함)가 유용합니다. –

+0

감사합니다. (저주 15 char 코멘트 최소 ...) –

관련 문제