Lisp 奇怪的路径名?

Lisp 奇怪的路径名?,lisp,common-lisp,sbcl,Lisp,Common Lisp,Sbcl,我使用的是sbcl-1.0.54 任何建议都将不胜感激 Apathname是一种使用组件(如驱动器、主机、目录、名称等)表示路径名的结构。有关详细信息,请参阅 使用带有:directory、:name和其他关键字的make pathname函数构造路径名,该函数返回类型为路径名的对象: * (make-pathname :name "cgi-bin/") #P"cgi-bin/" * (merge-pathnames "nav.py" #P"cgi-bin/") #P"cgi-bin/nav.p

我使用的是sbcl-1.0.54


任何建议都将不胜感激

A
pathname
是一种使用组件(如驱动器、主机、目录、名称等)表示路径名的结构。有关详细信息,请参阅

使用带有
:directory
:name
和其他关键字的
make pathname
函数构造
路径名
,该函数返回类型为
路径名
的对象:

* (make-pathname :name "cgi-bin/")
#P"cgi-bin/"
* (merge-pathnames "nav.py" #P"cgi-bin/")
#P"cgi-bin/nav.py"    ; **it is ok**
* (merge-pathnames "nav.py" (make-pathname :name "cgi-bin/"))
#P"nav.py"            ; why ?

*(defvar bp #P"/media/E/myapp/cgi-bin/")
* bp
#P"/media/E/myapp/cgi-bin/")
* (merge-pathnames "nav.py" bp)
#P"nav.py"            ; why ?
* (merge-pathnames "nav.py" #P"/media/E/myapp/cgi-bin/")
#P"/media/E/myapp/cgi-bin/nav.py"    ; **it is ok**
如文档所述,函数
合并路径名
完成使用默认路径名中的组件指定的路径名缺少的组件:


编辑:它不适用于您,因为您正在使用
:name
构造路径名,并指定文件名(不带扩展名或
:type
)。因此,当您调用
merge pathnames
时,它不会在其路径名中找到缺少的组件,因为“cgi-bin/”被指定为
:name
(文件名),并且您已经在“nav.py”中获得了一个文件名。

另请参见PCL的章节末尾。
CL-USER> (defvar p (make-pathname :directory '(:absolute "home" "test" "docs")))
CL-USER> #P"/home/test/docs/"
CL-USER> (merge-pathnames p "tada.txt")
CL-USER> #P"/home/test/docs/tada.txt"