prolog - 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初始化?
解决方案
我在交互模式下查看,它正在打印第一个可能的答案(_9956,变量占位符),在根据评估A之前,然后打印对Astate::objectOfEvent
的“真实”答案。
我可以通过使用 nonvar/1 确保 A 的值不是自由变量来消除占位符选项:
state::objectOfEvent(A,eve140642825991448), nonvar(A), write(A)
这感觉很hacky,我很想听听任何更好的解决方案。
推荐阅读
- oracle-data-integrator - 使用 ODI 12c 在 UNIX 服务器中生成 csv 文件
- ruby - 如何在语句中显示答案
- sql - 为传入值动态输入 (SQL)
- cassandra - 在 Cassandra 中删除索引时出错
- java - 递归删除相邻的重复项
- c++ - 在 Windows 执行目标 TLS 回调之前注入 dll
- c# - 在 DDD 中创建核心模型时如何分离/解耦子项的实例创建
- reactjs - 无法在反应中更新父道具
- vb.net - 如何使用 SELECT CASE 和 TO 使用 INTEGER
- java - 使用 RemoteWebDriver 截屏