% 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. ファイル名としてのパス名
なし。