常见的lisp - 获取文件的路径

时间:2011-12-07 02:02:55

标签: lisp common-lisp

在Common Lisp中,有没有办法获取编译文件的路径(类似于当前目录)?

该文件不在当前目录文件夹中。

5 个答案:

答案 0 :(得分:11)

这应该是一个评论,但我会给出一些可能有助于原始海报的代码示例。

首先,您需要更清楚自己想做什么。你试图解决的问题是什么?

其次,这里有几个可能有用的例子:

  • *default-pathname-defaults*通常设置为启动CL映像的目录:

    * *default-pathname-defaults*
    #P"/Users/aerique/"
    
  • merge-pathnames允许您构建新的路径名:

    * (merge-pathnames "lib/misc" *default-pathname-defaults*)
    #P"/Users/aerique/lib/misc"
    * (merge-pathnames "lib/misc/" *default-pathname-defaults*)
    #P"/Users/aerique/lib/misc/"
    
  • asdf:system-source-directory返回加载ASDF的系统的路径:

    * (asdf:system-source-directory :linedit)  
    #P"/Users/aerique/quicklisp/dists/quicklisp/software/linedit-20111203-git/"
    

另请参阅链接的ASDF手册,了解更多有用的文件和系统功能。

答案 1 :(得分:7)

*load-truename* resp。 *load-pathname*为您提供所需的信息。

http://www.lispworks.com/documentation/HyperSpec/Body/v_ld_pns.htm

答案 2 :(得分:2)

您想要的compile-file-pathname,它会为您提供compile-file写入的目的地。

如果您提供有关您要实现的目标的更多背景信息,那将会有所帮助。

答案 3 :(得分:0)

如果您想使用ASDF功能获取路径名,但还需要参加使用ASDF的用户,则可以这样使用:

(defmacro project-pathname ()
  (let ((path (or *compile-file-pathname* *load-truename*)))
    `(progn ,path)))

这是必要的,因为ASDF存储在一个“ / home / you /.../。cache /...”目录中,并且您需要在编译时使用一个宏捕获路径名。

答案 4 :(得分:-1)

您可以使用:

*default-pathname-defaults*

请参阅http://cybertiggyr.com/gene/pathnames-0/node11.html