Function PROVIDE
, REQUIRE
provide
module-name => implementation-dependent
require
module-name &optional
pathname-list => implementation-dependent
module-name - 文字列指定子
pathname-list - nil
か、 パス名指定子の空ではないリスト。 デフォルトはnil
。
provide
は*modules*
が保有しているリストに、 そのような名前がまだ存在していないときに module-nameをそのリストに追加します。
require
は*modules*
が保有するリスト内に module-nameが現れているかテストします。 もし現れているとき、require
は即座に返却します。 それ以外のとき、 次に示すようにファイルの集合を適切にロードするよう試みます。 pathname-listの引数について、 nil
ではなくパス名のリストを指定しているとき、 左から右の順番でロードを行います。 もしpathname-listがnil
のとき、 実装依存の仕組みにより module-nameという名前のモジュールを ロードするような仕組みが起動されます。 もしそのようなモジュールがロードできなかったとき、 型error
のエラーが通知されます。
両関数は、module-nameの存在をテストするときに string=
を使用します。
;;; これは移植不可能なREQUIREの使い方を示しています。
;;; なぜなら実装依存のファイルロードメカニズムだからです。
require "CALCULUS")
(
;;; これはリテラルな物理パス名のため
;;; 移植不可能なREQUIREの使い方です。
require "CALCULUS" "/usr/lib/lisp/calculus")
(
;;; 移植可能な使い方のフォームとして論理パス名を指定しており、
;;; どこかで適用可能な変換が定義されているものとします。
require "CALCULUS" "lib:calculus")
(
;;; 他の移植可能な使い方のフォームとして変数か
;;; テーブルの検索関数によるパス名の決定が挙げられます。
;;; これもまたどこかで初期化する必要があります。
require "CALCULUS" *calculus-module-pathname*) (
require
によって取られる特定の行動は、 provide
の呼び出しによって (または一般的に*modules*
の値の変更によって) 影響します。
module-nameが文字列指定子ではなかったとき、 型type-error
のエラーが通知されるべきです。
もしrequire
が ファイルシステムとの相互処理をしている間に 要求された処理に問題が生じて失敗したとき、 型file-error
のエラーが通知されます。
もしpathname-listの何かのパス名が ワイルドカードのパス名を指定した指定子であったとき、 型file-error
のエラーが通知されるかもしれません。
*modules*
, 19.1.2. ファイル名としてのパス名
もしモジュールがひとつのパッケージに含まれているとき、 慣習的にはパッケージとモジュールの名前は同じになります。