shell Sicstus:一个模块和CWD

9njqaruj  于 2023-04-12  发布在  Shell
关注(0)|答案(1)|浏览(77)

我有一个如下的SICStus脚本。我需要的是打印出当前工作目录(以便能够将该脚本保存在其中)并使用类似load命令的东西加载该文件。我如何才能完成这一点?最后但并非最不重要的是,我如何才能使up-arrow在提示符| ?-之后通过命令历史记录。

sat(Clauses, Vars) :- 
    problem_setup(Clauses), elim_var(Vars). 

elim_var([]). 
elim_var([Var | Vars]) :- 
    elim_var(Vars), (Var = true; Var = false). 

problem_setup([]). 
problem_setup([Clause | Clauses]) :- 
    clause_setup(Clause), 
    problem_setup(Clauses). 

clause_setup([Pol-Var | Pairs]) :- set_watch(Pairs, Var, Pol). 

set_watch([], Var, Pol) :- Var = Pol. 
set_watch([Pol2-Var2 | Pairs], Var1, Pol1):- 
    watch(Var1, Pol1, Var2, Pol2, Pairs). 

:- block watch(-, ?, -, ?, ?). 
watch(Var1, Pol1, Var2, Pol2, Pairs) :- 
    nonvar(Var1) -> 
        update_watch(Var1, Pol1, Var2, Pol2, Pairs); 
        update_watch(Var2, Pol2, Var1, Pol1, Pairs). 

update_watch(Var1, Pol1, Var2, Pol2, Pairs) :- 
    Var1 == Pol1 -> true; set_watch(Pairs, Var2, Pol2).
drnojrws

drnojrws1#

有几种方法可以询问SICStu它认为当前工作目录是什么。最简单的方法可能是调用absolute_file_name/2,并将'.'作为参数。
通常情况下,能够 * 更改 * 工作目录更有用,例如将文件放置到您的文件所在的位置。这可以使用file_systems库来完成。
以下文字记录显示了上述示例:

$ /usr/local/sicstus4.8.0/bin/sicstus -i -f
...
| ?- absolute_file_name('.', CWD).
CWD = '/Users/perm' ? 
yes
| ?- use_module(library(file_systems)).
...
| ?- current_directory(CWD).
CWD = '/Users/perm/' ? 
yes
| ?- current_directory(OldCWD, 'test').
OldCWD = '/Users/perm/' ? 
yes
| ?- current_directory(CWD).
CWD = '/Users/perm/test/' ? 
yes
| ?-

您没有说明您使用的是什么操作系统,或者您如何与SICStus顶级交互,因此不清楚您的命令历史记录指的是什么。
在SICStu IDE(SPIDER)中,这是与SICStu交互的推荐方式,顶层视图中有一个菜单,其中也有键盘快捷键,用于访问输入历史。在Emacs Prolog顶层中也有类似的命令,在传统的Windows SICStu窗口中也是如此。
如果你特别希望向上箭头键具有显示以前历史的效果,我认为你可以在SPIDER和Emacs中做到这一点,只要花点功夫,通过将该键重新绑定到相应的命令。
如果您只是从命令行运行sicstus(或sicstus.exe)命令,则SICStus本身没有命令行编辑或历史记录。这取决于您的终端模拟器提供此功能。另一种选择,至少在macOS和Linux上,是一些用户用作sicstus命令 Package 器的rlwrap工具。
我不认为您的代码示例与您的任何问题相关。

相关问题