【问题标题】:Exact operations to get multiple solutions in SWI-Prolog在 SWI-Prolog 中获得多种解决方案的精确操作
【发布时间】:2018-10-30 21:09:53
【问题描述】:

扩展this 问题,为 SWI-Prolog 生成多种解决方案需要哪些按键?

测试代码:

test(10).
test(1).

尝试的交互:

?-test(X). // <- entered query

*按enter 会产生以下结果:

?-test(X).
X = 10.
 
?- // <- typing prompt here, pressing ";" here enters semi-colon character in new line.

根据手册:

如果需要其他解决方案,用户可以键入分号 (;) 或空格键。如果您不想看到更多答案,请使用返回键。如果用户使用返回键或 Prolog 知道没有更多答案,Prolog 会以句点 (.) 完成输出。如果 Prolog 找不到(更多)答案,它会写为 false。

什么时候应该按下这些键(分号/空格),以便程序给出多个解决方案而不是开始一个新的查询?

【问题讨论】:

  • 我认为您的事实与加载的内容不匹配,因为如果您的商店中确实有这两个事实,Prolog 会停在X = 10 并等待您输入句点或分号.因为它没有,它认为没有进一步的解决方案。试试member(X, [1,2,3]). 看看我在说什么。
  • 您是否重新加载文件,该文件是否包含其他内容?是否有任何编译器警告/错误?
  • 我不明白你在这里试图建议什么,应该总是有一种方法至少尝试获得多个解决方案,即使只有一个解决方案.这样做只会导致解决方案“错误”。
  • @user289661 实际上,如果堆栈上没有选择点,SWI Prolog 和许多其他人不会为您提供更多解决方案,因此在这种情况下您不能要求更多解决方案。

标签: prolog


【解决方案1】:

当你看到

X = 10. 

?- 

with句号已经出现)表示点是Prolog自己打印的,表示没有更多的解决方案;此时与查询的交互已经结束,它正在等待您的下一个查询,如提示 ?- 所示。

如果 Prolog “认为”可能有更多解决方案,那么您会看到 X = 10 _0 后面有一个 空格),它会等待您的按键,光标_ 仍在该行上,不显示提示。如果在那个时候按下了句号,你自己中止了对更多解决方案的搜索,脚本会显示

X = 10 .     % notice the space

?-

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-12-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多