Lispコードのファイルの内容をLispオブジェクトの形でLisp環境に取り込みます。ロードするファイルのコードは、Lisp式のソースコードかバイトコンパイル済みコードである必要があります。
以下は、"各種ロード関係の関数の違い"についてです。
load
インタプリタでloadします。
load-library
*.lcがあればそれをロードします。*.lcがなければ*.lをロードします。
autoload
関数1つ単位で、呼ばれたときロードするようにできます。関数が呼ばれるまではロードされません。
require
あるライブラリをロードします。ただし、既にロード済みならロードしません。
modules
この変数を見ると今どのモジュールがロード済か分かります。既にロード済だともうロードしません。
次の例では、foo.lというファイルをロードする。
(load "foo.l")
ロードパスの追加
load-library等でライブラリをロードする対象パスを*load-path*にリストで設定することもできます。
;; ライブラリをロードするパスを追加する。
(setq *load-path*
(cons (merge-pathnames "bar" (user-homedir-pathname))
*load-path*))
この例は、ユーザのホームディレクトリにあるbarというサブディレクトリもライブラリをロードする際の検索対象となる。但し、追加されるパスのサブディレクトリについては、検索対象から除外される。
.xyzzyから.xyzzy.lをロードする。
.xyzzyに大量のLispコードを記述する場合には、.xyzzy.lという別の名前のファイルへ内容をコピーして、それをバイトコンパイルし、.xyzzyでは下記の様にloadでバイトコンパイル済みファイル(.xyzzy.lc)をロードする記述のみしておくと良い。
(load ".xyzzy.lc")
この例は、次の様に工夫すると何かと便利である。
(defvar *init-file-name* (merge-pathnames ".xyzzy.l" (user-homedir-pathname)))
;; コンパイル済みファイルがあれば、それを対象とする。
(if (file-exist-p (concat *init-file-name* "c"))
(setq *init-file-name* (concat *init-file-name* "c")))
;; Lispファイルのロード
(if (file-exist-p *init-file-name*)
(load *init-file-name*)
;; .xyzzy.lファイルが無い場合は、デフォルトの初期化ファイルを利用する。
;; 但し、user-homedir-pathname と si:system-root が異なる場合のみ。
(unless (equalp (user-homedir-pathname) (si:system-root))
(load (merge-pathnames ".xyzzy" (si:system-root)))))
この例は、.xyzzy.lc(コンパイル済みの.xyzzy.l)ファイルがあればそれをロードし、コンパイル済みで無ければ.xyzzy.lをロードするが、それも無ければ全てのユーザ共通の初期化ファイルを(マルチユーザ環境の場合のみ)ロードする。
次の例では、前記と同様の結果を得ることができる。
(unless (equalp (user-homedir-pathname) (si:system-root))
(setq *load-path*
(cons (merge-pathnames "site-lisp" (user-homedir-pathname))
*load-path*))
)
(if (file-exist-p (merge-pathnames ".xyzzy.*" (user-homedir-pathname)))
(require "../.xyzzy")
(unless (equalp (user-homedir-pathname) (si:system-root))
(load (merge-pathnames ".xyzzy" (si:system-root)))))
この例では、マルチユーザ環境であれば、*load-path* に ~/site-lispディレクトリを追加するので、当該ユーザの為のライブラリの管理にも便利である。引用元: xyzzy備忘録: xyzzyのLisp用例 -- らいおさむのお屋敷,
"http://www.osamurai.flnet.org/memo/xyzzy/tips#SEC.1.1"