% Function LOAD
Function LOAD
load filespec &key verbose print if-does-not-exist external-format
=> generalized-boolean
filespec - ストリームか、パス名指定子。
デフォルトは*default-pathname-defaults*から取得されます。
verbose - generalized-boolean。デフォルトは*load-verbose*の値。
print - generalized-boolean。デフォルトは*load-print*の値。
if-does-not-exist - generalized-boolean。デフォルトはtrue。
external-format - 外部ファイルフォーマット指定子。デフォルトは:default。
generalized-boolean - generalized-boolean
loadは、filespecという名前のファイルをLisp環境にロードします。
ソースファイルとコンパイルファイルの区別する方法については
実装依存です。
もしファイルの定義が不完全であり、
ソースファイルとコンパイルファイルの両方が存在し、
それらにマッチするとき、
これらのどのファイルがloadに選択されるかは
実装依存です。
もしfilespecがストリームのとき、
loadはストリームが何の種類か決定し、
そしてストリームから直接ロードを行います。
もしfilespecが論理パス名のとき、
それはtranslate-logical-pathnameが呼び出されたかのように
物理パス名へと変換されます。
loadはfilespecによって名付けられたファイル内において
連続的に遭遇した各フォームを実行していきます。
もしそのファイルがソースファイルであり、
実装が暗黙的にコンパイルする処理を選んだとき、
loadは3.2.3.1. トップレベルフォームの処理に記載されているような
トップレベルのフォームとして識別しなければならず、
次の暗黙的なコンパイルが始まる前に
各トップレベルフォームの実行を整えます
(しかしloadによって処理を行うeval-whenフォームの
:executeの状況によって制御できます)。
もしverboseがtrueのとき、
loadはコメントのフォーム(例えば先頭にセミコロン) で
メッセージを標準出力に対して
どのようなファイルがコンパイルされたかや、
その他の有益な情報などを印刷します。
もしverboseがfalseのときは、そのような情報は印刷されません。
もしprintがtrueのとき、
loadは標準出力に対して徐々に情報を出力していき
ロード処理の進行を示します。
ソースファイルのとき、
この情報はそのファイル内の各フォームによって
生成された値とすぐに返却される値を出力する意味があります。
コンパイルファイルのとき、
何が印刷されるかはソースファイルの情報が
正確に反映されないかもしれませんが、
しかしいくつかの一般的な情報が印刷されます。
もしprintがfalseのときは、そのような情報は印刷されません。
もしfilespecという名前のファイルがロードに成功したとき、
loadはtrueを返却します。
もしファイルが存在しないときは、
if-does-not-existに依存した動作が取得されます。
もしこの値がnilのときは
loadはnilを返却します。
それ以外のときはエラーが通知されます。
external-formatは、
ファイルをオープンするときに使用される
(関数openをご確認ください)
外部ファイルフォーマットを指定しますが、
filespecという名前で指定されたファイルがコンパイルファイルのときは、
external-formatは無視されます。
compile-fileとloadは強調して
ファイルコンパイラ時に外部ファイルフォーマットが指定されたときに
そのソースファイルが処理された時点で
参照されたソースファイルの文字の相似を保存するように、
実装依存な方法にて保証します。
よってそのコンパイルファイルがロードされた時点での
external-formatの値に関わらずロードされます。
loadは*readtable*と*package*に対して、
ファイルのロードをする前に保持されていた値に束縛します。
*load-truename*は、
loadによって束縛が行われ、
その内容はロードされているファイルのパス名のtruenameです。
*load-pathname*は
loadによって束縛が行われ、
その内容はloadの最初の引数と
デフォルト値がマージされたものを示します。
つまり(pathname (merge-pathnames input-file))です。
;Establish a data file...
(with-open-file (str "data.in" :direction :output :if-exists :error)
(print 1 str) (print '(setq a 888) str) t)
=> T
(load "data.in") => true
a => 888
(load (setq p (merge-pathnames "data.in")) :verbose t)
; Loading contents of file /fred/data.in
; Finished loading /fred/data.in
=> true
(load p :print t)
; Loading contents of file /fred/data.in
; 1
; 888
; Finished loading /fred/data.in
=> true
;----[Begin file SETUP]----
(in-package "MY-STUFF")
(defmacro compile-truename () `',*compile-file-truename*)
(defvar *my-compile-truename* (compile-truename) "Just for debugging.")
(defvar *my-load-pathname* *load-pathname*)
(defun load-my-system ()
(dolist (module-name '("FOO" "BAR" "BAZ"))
(load (merge-pathnames module-name *my-load-pathname*))))
;----[End of file SETUP]----
(load "SETUP")
(load-my-system)
実装と、ホストコンピューターのファイルシステム
もし:if-does-not-existがtrueに指定されるか
あるいは指定されなかったとき、
filespecによって名前付けられたファイルが存在しなかったとき、
あるいはファイルシステムがその要求した処理を実施できなかったときは、
loadは型file-errorのエラーを通知します。
もし(wild-pathname-p filespec)がtrueのときは、
型file-errorのエラーを通知できます。
error,
merge-pathnames,
*load-verbose*,
*default-pathname-defaults*,
pathname,
logical-pathname,
20.1. ファイルシステムの説明,
19.1.2. ファイル名としてのパス名
なし。