Function PARSE-NAMESTRING
parse-namestring thing &optional host default-pathname &key start end junk-allowed
=> pathname, position
thing - 文字列か、パス名か、ファイルストリーム
host - 有効なパス名のホストか、論理ホストか、nil
default-pathname - パス名指定子。 デフォルトは*default-pathname-defaults*の値です。
start, end - thingの境界インデックス指定子。 デフォルトはstartとendがそれぞれ0とnil。
junk-allowed - generalized-boolean。デフォルトはfalse。
pathname - パス名か、nil
position - thingの境界インデックス指定子
thingをパス名に変換します。
hostには構文解析の対象となるホスト名を指定します。
もしthingがパス名のときは、hostとthingのホストの要素が比較されます。 もしそれらが合っているときは、二値のthingとstartがすぐに返却されます。 それ以外のときは(もしそれらが合っていないとき)、エラーが通知されます。
もしthingが文字列のとき、parse-namestringは startとendの境界によるthingの部分文字列内を ファイル名として構文解析します。
もしthingが文字列であるとき、 startとendの境界によるthingの部分文字列は 次のようにパス名を構文解析します。
もしhostが論理ホストなら、 thingはhostの論理パス名の名前文字列として構文解析されます。
もしhostがnilであり、 thingが暗にホストに含まれるような 論理パス名の名前文字列の有効な構文であったときは、 それは論理パス名の名前文字列として構文解析されます。
もしhostがnilであり、 default-pathnameが論理パス名で、 かつthingが暗にホストに含まれるような 論理パス名の名前文字列の有効な構文であったときは、 それはホストがdefault-pathnameのホスト要素であるような 論理パス名の名前文字列として構文解析されます。
それ以外のときは、thingの構文解析はは実装定義です。
これらの最初の場合は、論理パス名の名前文字列にある ホストの位置と続くコロンはオプションです。
もし名前文字列のホストの位置とhostの両方が現れており、 それらがマッチしなかったときはエラーが発生します。
もしjunk-allowedがtrueのとき、 主値は構文解析されたパス名か、 あるいはもしパス名が構文として正しくないときは nilになります。 もしjunk-allowedがfalseのとき、 部分文字列の全体が調査され、 主値は構文解析されたパス名になります。
どちらの場合でも、第二返却値は、 構文解析が終了したthingの区切りのインデックスか、 あるいはもし部分文字列の終了位置まで構文解析が終わったときの その部分文字列を越えたインデックスになります (もしjunk-allowedがfalseのときは常にこのケースです)。
空の文字列の構文解析は常に成功であり、 全ての要素(ホストを除く)がnilと等しい パス名が生成されます。
もしthingに暗にホスト名が含まれており、 そしてデバイス名が含まれてないときは、 parse-namestringが そのホストの結果のパス名のデバイスの要素として 標準のデバイスを供給するかどうかは実装定義です。
(setq q (parse-namestring "test"))  
=>  #S(PATHNAME :HOST NIL :DEVICE NIL :DIRECTORY NIL :NAME "test" 
      :TYPE NIL :VERSION NIL)
(pathnamep q) =>  true
(parse-namestring "test") 
=>  #S(PATHNAME :HOST NIL :DEVICE NIL :DIRECTORY NIL :NAME "test"
      :TYPE NIL :VERSION NIL), 4
(setq s (open xxx)) =>  #<Input File Stream...>
(parse-namestring s) 
=>  #S(PATHNAME :HOST NIL :DEVICE NIL :DIRECTORY NIL :NAME xxx 
      :TYPE NIL :VERSION NIL), 0
(parse-namestring "test" nil nil :start 2 :end 4 )
=>  #S(PATHNAME ...), 15
(parse-namestring "foo.lisp")
=>  #P"foo.lisp"なし。
もしjunk-allowedがfalseであり、 thingがパス名の全体の表現で構成されていないときは、 型parse-errorのエラーが通知されます。 ただし実装の文化的習慣に合っているならば、 両サイドが空白文字によって囲むことができるかもしれません。
もしhostがnil以外で指定されており、 thingに明にホスト名が含まれているとき、 その両者のホストがあっていなかったときは 型errorのエラーが通知されます。
もしthingが論理パス名の名前文字列であり、 名前文字列のホストの位置のものとhostの両方が存在し、 両者がマッチしなかったときは、 型errorのエラーが通知されます。
pathname, logical-pathname, 20.1. ファイルシステムの説明, 19.2.2.2.3. :UNSPECIFICという要素の値, 19.1.2. ファイル名としてのパス名
なし。