Lisp 奇怪的路径名?
我使用的是sbcl-1.0.54Lisp 奇怪的路径名?,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
任何建议都将不胜感激 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"