Function MAKE-PATHNAME

UP


Function MAKE-PATHNAME

Function MAKE-PATHNAME

構文

make-pathname &key host device directory name type version defaults case => pathname

引数と戻り値

host - 有効な物理パス名のホスト。 標準の動作が複雑なので説明をご確認ください。
device - 有効なパス名のデバイス。 標準の動作が複雑なので説明をご確認ください。
directory - 有効なパス名のディレクトリ。 標準の動作が複雑なので説明をご確認ください。
name - 有効なパス名の名前。 標準の動作が複雑なので説明をご確認ください。
type - 有効なパス名の型。 標準の動作が複雑なので説明をご確認ください。
version - 有効なパス名のバージョン。 標準の動作が複雑なので説明をご確認ください。
defaults - パス名指定子。 デフォルトは、ホストの要素が *default-pathname-defaults*の値の ホストの要素と同じであり、 その他の要素は全てnilであるパス名。
case - :common:localのうちのひとつ。デフォルトは:localです。
pathname - パス名

定義

指定されたキーワード引数からパス名を構築して返却します。

明示的にhost, device, directory, name, type, versionが 指定された要素が記入されたあとは、 merge-pathnamesを使用したかのようなマージの規則に従い、 指定されなかった要素に対して defaultによって指定された標準の要素を埋めていきます。

パス名は適用可能であれば要素に対して正規化されて構築されます。 各要素に対して指定された各引数の説明は19.2.1. パス名の説明をご確認ください。

もしcaseが指定されたとき、 それは19.2.2.1.2. パス名の要素の大文字小文字の説明のように扱われます。

もしホストの要素が論理ホストか、 論理ホストとして定義された名前の文字列のときは、 結果のpathnameは論理パス名です。

もしdirectoryが文字列のとき、 それはトップレベルのディレクトリ名でなくてはならず、 どんなくぐり文字も含まれてはなりません。 つまり、文字列strが指定されたときは、 リストの(:absolute str)が指定されたのと同等です。 シンボル:wildが指定されたときは、 リストの(:absolute :wild-inferiors)か システムが:wild-inferiorsをサポートしていないときは (:absolute :wild)が指定されたのと同等です。

例文

;; 実装A - この実装はひとつのUnixファイルシステムにアクセスします。
;;  この実装はhostの情報を名前文字列に決して表示しないので、
;;  hostはただひとつになります。
(make-pathname :directory '(:absolute "public" "games")
               :name "chess" :type "db")
=>  #P"/public/games/chess.db" 

;; 実装B - この実装はひとつか複数のVMSファイルシステムにアクセスします。
;;  この実装はhostの情報がローカルホストではないときのみ
;;  名前文字列に出力します。それはホスト名とローカルファイル名を
;;  区切るのにダブルコロンが使われます。
(make-pathname :directory '(:absolute "PUBLIC" "GAMES")
               :name "CHESS" :type "DB")
=>  #P"SYS$DISK:[PUBLIC.GAMES]CHESS.DB" 
(make-pathname :host "BOBBY"
               :directory '(:absolute "PUBLIC" "GAMES")
               :name "CHESS" :type "DB")
=>  #P"BOBBY::SYS$DISK:[PUBLIC.GAMES]CHESS.DB" 

;; 実装C - この実装は同じLispイメージから多重のファイルシステムに
;;  同時にアクセスします。この実装は、パス名の名前文字列にある
;;  最初のコロンに先行したテキストがホスト名である慣習があります。
(dolist (case '(:common :local))
  (dolist (host '("MY-LISPM" "MY-VAX" "MY-UNIX"))
    (print (make-pathname :host host :case case
                          :directory '(:absolute "PUBLIC" "GAMES")
                          :name "CHESS" :type "DB"))))
>>  #P"MY-LISPM:>public>games>chess.db"
>>  #P"MY-VAX:SYS$DISK:[PUBLIC.GAMES]CHESS.DB"
>>  #P"MY-UNIX:/public/games/chess.db"
>>  #P"MY-LISPM:>public>games>chess.db" 
>>  #P"MY-VAX:SYS$DISK:[PUBLIC.GAMES]CHESS.DB" 
>>  #P"MY-UNIX:/PUBLIC/GAMES/CHESS.DB" 
=>  NIL

影響

ファイルシステム。

例外

なし。

参考

merge-pathnames, pathname, logical-pathname, 20.1. ファイルシステムの説明, 19.1.2. ファイル名としてのパス名

備考

移植可能なプログラムは各要素に:unspecificを指定するべきではありません。 19.2.2.2.3. :UNSPECIFICという要素の値をご確認ください。


TOP, Github