CLIPS同目录文件加载失败求助:无需绝对路径加载同目录文件
解决CLIPS同目录文件加载问题
问题核心是CLIPS的load命令默认使用当前工作目录,而非loader.txt所在的目录——哪怕你手动切换了系统目录,CLIPS的工作目录未必同步更新,导致相对路径找不到目标文件。
直接用下面的修改方案,自动获取loader.txt的目录路径,再拼接文件名加载:
(deffunction loading() ; 获取当前执行的loader.txt文件所在目录 (bind *loader-dir* (pathname-directory (system-file-path))) ; 拼接目录与文件名,加载同目录下的文件 (load (str-cat *loader-dir* "templates.txt")) (load (str-cat *loader-dir* "facts.txt")) (load (str-cat *loader-dir* "functions.txt")) (load (str-cat *loader-dir* "rules.txt")) )
关键逻辑说明:
(system-file-path):返回当前正在执行的CLIPS文件(即loader.txt)的完整路径。(pathname-directory <完整路径>):从完整路径中提取出目录部分(比如/home/user/clips/)。(str-cat <目录> <文件名>):将目录和文件名拼接成完整的文件路径,确保加载的是loader.txt同目录下的目标文件。
这种写法不管你从哪个目录启动CLIPS,只要加载了loader.txt,它都会自动定位到同目录下的其他文件,无需手动写死绝对路径。
内容的提问来源于stack exchange,提问作者definitely_not_panicking
相关产品推荐
相关产品推荐

