首页 > 解决方案 > 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。但是,如果我进入交互模式并运行相同的查询,它将输出正确的答案。

这个 SO 答案表明这是因为变量A尚未初始化 -在写出答案之前如何让A初始化?

标签: prologswi-prolog

解决方案


我在交互模式下查看,它正在打印第一个可能的答案(_9956,变量占位符),在根据评估A之前,然后打印对Astate::objectOfEvent的“真实”答案。

我可以通过使用 nonvar/1 确保 A 的值不是自由变量来消除占位符选项:

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

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


推荐阅读