2012-01-25 15 views
4

私はdrracketを使って "How To Design Programs 2nd Ed"の演習で作業しようとしています。私は体をコピー&ペーストする必要がないようにラケット/スキーム内のファイルを含める

この前の 質問にビルドアップの演習の数なので、私は からソースファイルを含めたいが質問に答え 毎回古い回答の

私の主な質問は次のとおりです。これを行うにはどうすればよいですか?

私は、ドキュメントを通して見て、私がやりたいように思わ includeと呼ばれる方法を見つけましたが、私は正しく にそれを使用する方法をうまくカントています。

例えば - 私は2つのファイルがあります - これは、コンパイルし、正常に動作し、一つの機能が含まれ

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"または他の教授言語の1つに設定されている場合、DrRacketはプログラムをモジュールで実際にラップするためです。通常のテキストエディタで"test.rkt"を開くと、これが表示されます。 #reader....ビットがモジュールを生成します。しかし、それがincludedを他のファイルに入れると、意味をなさない。したがって、エラーは約moduleについて不平を言う。

残念ながら、私が知る限り、HtDP言語にはまだprovideがありません。これは、この作業を正しく行うために必要なものです。

あなたが本当にこの作業を取得したい場合は、ここではその周りにハックする方法です:

はあなたの他のファイルと同じディレクトリに"provide.rkt"と呼ばれる新しいファイルを作成します。このファイル(およびこのファイルのみ)を編集している間、DrRacketの言語を「ソースから言語を決定する」に設定します。 "provide.rkt"に次の2行を置く:

#lang racket 
(provide provide) 

(。それが唯一のビルトイン特殊な形式provideを提供し、フルラケットの言語を使用してモジュールを宣言する)

あなた"test.rkt"プログラムに次の行を追加します。 (DrRacketの言語が「Beginning Student」に設定されていることを確認してください。)今

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

"test.rkt"はあなたのtest機能をエクスポートするモジュールです。 (。それは非常に有用ではありませんでしたので、それだけで、前に任意の輸出を持っていなかった、常にモジュールだった)

あなた"newtest.rkt"プログラムに次の行を追加します

(require "test.rkt") 

提供すべてをインポート"test.rkt":現在はちょうどtestですが、他のものを追加することができます。ちょうどprovideです。

+0

ありがとうございます - 私はこれを試してみます。だから私はそれらを使用する前にすべての機能を '提供する'必要がありますか?言語を教授の言語の代わりにスキームに設定する方がよいでしょうか? –

+0

いいえ、他のファイル(つまり、他のモジュール)に表示させたい機能を '提供 'する必要があります。そして、いいえ、おそらく教える言語に固執する価値があります。 1つは、テストフレームワーク(カバレッジチェックを含む)が有用です。 –

+0

ありがとう! (最小15文字のコメントを呪います...) –

関連する問題