gpt4 book ai didi

lisp - 奇怪的路径名?

转载 作者:太空宇宙 更新时间:2023-11-03 18:38:29 26 4
gpt4 key购买 nike

* (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**

我正在使用 sbcl-1.0.54。

感谢任何建议!

最佳答案

路径名 是一种使用组件表示路径名的结构,例如驱动器主机目录姓名等。参见here了解更多详情。

您使用带有:directory:name 和其他关键字的make-pathname 函数构造一个pathname,并且该函数返回类型为 pathname 的对象:

CL-USER> (defvar p (make-pathname :directory '(:absolute "home" "test" "docs")))
CL-USER> #P"/home/test/docs/"

函数 merge-pathnames 记录在案 here , 用 default-pathname 中指定的路径名 补全缺少的组件:

CL-USER> (merge-pathnames p "tada.txt")
CL-USER> #P"/home/test/docs/tada.txt"

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

关于lisp - 奇怪的路径名?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8752106/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com