2016-09-09 6 views
2

私が試した:現在のラケットファイルに別の定義ファイルを含めるには?

#lang racket 
(require foo.rkt) 

#lang racket 
(require "foo.rkt") 

#lang racket 
(require (relative-in "." foo.rkt)) 

を単に現在のファイルのディレクトリにあるファイルをインクルードする簡単な例では、ドキュメントに存在する場合、私はそれを見つけることができません。助けてください。

+0

[ラケットのファイルから関数をインポートするにはどうすればいいですか?](http://stackoverflow.com/questions/34756477/how-can-i-import-a-function-from-a-file -in-racket) –

+0

また、必要なものによっては、http://stackoverflow.com/questions/4809433/including-an-external-file-in-racketも役立ちます。 –

+0

ああ、ありがとう!その人は特定の関数をインポートするよう依頼しましたが。しかし、与えられた答えはファイルの*でした。 – p00k1e

答えて

5

あなたの第二の推測では、実際には正しいです。しかし

#lang racket 
(require "foo.rkt") 

、何をする必要がもprovideあなたが他のファイルから必要にしたい機能である、そうでない場合はfoo.rktからの変数がにバインドされませんあなたモジュール。

のでfoo.rktファイルの例は次のようになります。

​​

(提供の場所は関係ない、とdefine文の上または下にすることができます。)

したい場合は、 all-defined-outを使用して、モジュールが一度に提供できるすべてをエクスポートすることができます。これを行うには:

#lang racket ; foo.rkt 
(provide (all-defined-out)) 
(define x 5) 
(define y 6) 

は今、あなたはこのファイルを必要とし、別のモジュールにxyを使用することができます:2つのファイルが同じディレクトリにする必要があること

#lang racket 
(require "foo.rkt") 
x ; => 5 

注、そうでない場合はあなたが必要となりますそのディレクトリへのパスを渡します。このように第一添加物として

(require "subdir/to/foo.rkt") 

、ラケットもimportload有します。一般的に、あなたはこれらを望んでおらず、一般にrequire/provideのペアに固執する必要があります。

2番目の補足として、作成するローカルファイルは、requireに文字列として渡されます。そのシンボルが:(require pict)の場合は、インストールされているモジュールが必要です。あなたのより高度なあなたはすることができますdocumentation on collectionsを読んでそれらのいずれかを行います。