Prolog:强制初始化变量以进行命令行打印

时间:2019-01-20 21:11:51

标签: prolog swi-prolog

我正在尝试编写一个bash命令,该命令将打开Prolog(在这种情况下为logtalk),评估一个变量(此处为 A ),写出该变量的名称并退出。我走了这么远:

swilgt -q -s prolog/condep.lgt -s /tmp/tmp_xc5gfpp.lgt -g 'state::objectOfEvent(A,eve140642825991448), writeln(A).' -t halt.

但是它输出的答案类似于_9956。但是,如果我进入交互模式并运行相同的查询,它将输出正确的答案。

This SO answer表示这是因为变量 A 尚未初始化-我该如何在写出答案之前让 A 初始化? >

1 个答案:

答案 0 :(得分:0)

我处于交互模式,它正在打印第一个可能的答案(_9956,可变占位符),然后根据state::objectOfEvent评估 A ,然后将“ true”答案打印到 A

我可以通过确保A的值为not a free variable using nonvar/1来消除占位符选项:

state::objectOfEvent(A,eve140642825991448), nonvar(A), write(A)

这感觉很hacky,我很想听听任何更好的解决方案。