2016-08-12 3 views

答えて

5

Loadおよびrequireは、純粋に実行時の手続きアクションです。 Loadは、文字列引数を受け取り、その名前(ソースコードまたはコンパイル済みコード)を実行中のSchemeにロードします。その結果、定義されているものが利用可能になります。 Requireも同じことを行いますが、同じ名前(通常はロードされたファイル)で提供が呼び出されたかどうかを確認して、ファイルがすでに読み込まれているかどうかを確認します。他の言語のプラグインに対応する、Schemeプログラミングでは比較的まれです。コンパイル時に未知のコードがロードされる必要があります。詳細はユニットevalのマニュアルページを参照してください。

Importは、ファイルではなくモジュールに関係しています。すでにロードされているはずの名前付きモジュールを探し、そのモジュールからエクスポートされた名前を現在のコンテキストで表示します。モジュールを正常にインポートするには、モジュールのインポートライブラリが必要です。これは構文なので、モジュール名は呼び出し時に明示的に指定する必要があり、実行時には計算できません。詳細については、モジュールのマニュアルページを参照してください。

Require-library正しいコードを読み込むことができます。コードが実行中のSchemeの一部である場合、コードはChickenに組み込まれているため、何もしません。それ以外の場合は、コアライブラリユニットがある場合はロードし、最後の手段としてrequireを呼び出します。コンパイル時には、実行時に環境が正しいことを確認するために類似のことが行われます。詳細については、マニュアルの「非標準マクロと特殊形式」のページを参照してください。

Useは、require-libraryと同じ名前のimportとなります。 Chickenプログラムに機能を追加する最も一般的な方法です。ただし、これらのモジュールの機能が既にロードされているため、(import scheme)(import chicken)と記述します。 Require-extensionは、useの正確な同義語であり、SRFI 55との互換性のために提供されています。 R7RSモードでは、importuseの同義語です。

+0

恐縮です、ありがとうございます。 –

+1

これもCHICKEN 5で簡略化されます: 'use'、' require-extension'と 'import'は基本的に同じ動作をします。結局、これらのうちの1つまたは2つを取り除くことになります。 – sjamaan

関連する問題