Function LOAD

UP


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が呼び出されたかのように 物理パス名へと変換されます。

loadfilespecによって名付けられたファイル内において 連続的に遭遇した各フォームを実行していきます。 もしそのファイルがソースファイルであり、 実装が暗黙的にコンパイルする処理を選んだとき、 loadは3.2.3.1. トップレベルフォームの処理に記載されているような トップレベルのフォームとして識別しなければならず、 次の暗黙的なコンパイルが始まる前に 各トップレベルフォームの実行を整えます (しかしloadによって処理を行うeval-whenフォームの :executeの状況によって制御できます)。

もしverbosetrueのとき、 loadはコメントのフォーム(例えば先頭にセミコロン) で メッセージを標準出力に対して どのようなファイルがコンパイルされたかや、 その他の有益な情報などを印刷します。 もしverbosefalseのときは、そのような情報は印刷されません。

もしprinttrueのとき、 loadは標準出力に対して徐々に情報を出力していき ロード処理の進行を示します。 ソースファイルのとき、 この情報はそのファイル内の各フォームによって 生成された値とすぐに返却される値を出力する意味があります。 コンパイルファイルのとき、 何が印刷されるかはソースファイルの情報が 正確に反映されないかもしれませんが、 しかしいくつかの一般的な情報が印刷されます。 もしprintfalseのときは、そのような情報は印刷されません。

もしfilespecという名前のファイルがロードに成功したとき、 loadtrueを返却します。

もしファイルが存在しないときは、 if-does-not-existに依存した動作が取得されます。 もしこの値がnilのときは loadnilを返却します。 それ以外のときはエラーが通知されます。

external-formatは、 ファイルをオープンするときに使用される (関数openをご確認ください) 外部ファイルフォーマットを指定しますが、 filespecという名前で指定されたファイルがコンパイルファイルのときは、 external-formatは無視されます。

compile-fileloadは強調して ファイルコンパイラ時に外部ファイルフォーマットが指定されたときに そのソースファイルが処理された時点で 参照されたソースファイルの文字の相似を保存するように、 実装依存な方法にて保証します。 よってそのコンパイルファイルがロードされた時点での 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-existtrueに指定されるか あるいは指定されなかったとき、 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. ファイル名としてのパス名

備考

なし。


TOP, Github