在许多Prolog系统中,很容易为咨询文件添加新的搜索路径。 例如,在Yap中,我知道的谓词是add_to_path(NewPath)。 有没有办法在SWI Prolog中做同样的事情?我的问题是专门为已经存在的路径添加一个路径,我知道用于声明目录的file_search_path / 2谓词,以及用于更改当前目录的cd / 1谓词,但我想知道是否有替代方法,就像我在Yap找到的方法。
提前感谢!
答案 0 :(得分:7)
在.plrc
/ .yaprc
/ .sicstusrc
/ .swiplrc
中填写
:- multifile(library_directory/1).
library_directory('/home/ulrich/lftp/Prolog-inedit').
答案 1 :(得分:7)
这有几种机制。我遇到的第一个是C-Prolog,它确实使用了library_directory/1
的子句。目前的SWI-Prolog机制源自Quintus,也用于SICStus。它从library_directory/1
方法推广
将表单<alias>(Path)
的表达式视为对路径别名<alias>
的搜索。
使用谓词file_search_path/2定义别名的路径。现在,library
只是一个别名。通常,使用子句file_search_path(library, Dir)
添加库。
这种机制已被证明非常灵活。当然,如果Prolog系统在这里更兼容,那将是很好的。我想今天YAP也支持file_search_path
系统。 (2016年编辑:确实如此,见YAP Prolog User's Manual: Changing the Compiler’s Behavior)