我试图使用相对路径从同一目录中的文件加载Lisp中的文件.
我的文件结构如下所示:
repo/
subdir/
main.lisp
test.lisp
Run Code Online (Sandbox Code Playgroud)
在main.lisp我有许多函数定义,并在test.lisp我想测试函数.
我已尝试使用(load "main.lisp")和(load "main")in test.lisp,以及路径名的许多变体(即,包括./在文件名之前)但两次我得到以下错误(<filename>传递给加载函数的文件名在哪里):
File-error in function LISP::INTERNAL-LOAD: "<filename>" does not exist.
是否可以main.lisp使用相对路径加载?
这可能是值得指出的是,我正在CMUCL和执行使用的代码SublimeREPL崇高的文本3的内部.
加载文件时,变量*LOAD-PATHNAME*绑定到正在加载的文件的路径名,并绑定*LOAD-TRUENAME*到其truename.
因此,您可以说,要将文件加载到当前正在加载的文件的同一目录中
(load (merge-pathnames "main.lisp" *load-truename*))
Run Code Online (Sandbox Code Playgroud)
jlahd的回答非常好。
如果需要进行不同的路径名计算,可以使用内置函数来完成:
(let* ((p1 (pathname "test.lisp")) ; not fully specified
(name1 (pathname-name p1)) ; the name "test"
(type1 (pathname-type p1)) ; the type "lisp"
(p2 #p"/Users/joswig/Documents/bar.text") ; a complete pathname
(dir2 (pathname-directory p2))) ; (:ABSOLUTE "Users" "joswig" "Documents")
; now let's construct a new pathname
(make-pathname :name name1
:type type1
:directory (append dir2 (list "Lisp")) ; we append a dir
:defaults p2)) ; all the defaults
; relevant when the filesystem supports
; host, device or version
Run Code Online (Sandbox Code Playgroud)
结果:#P"/Users/joswig/Documents/Lisp/test.lisp"。
通常为了重用上面这样的东西,人们会把它变成一个实用函数......
| 归档时间: |
|
| 查看次数: |
3429 次 |
| 最近记录: |