【问题标题】:Prolog no operand PredicatesProlog 无操作数谓词
【发布时间】:2014-01-24 23:00:49
【问题描述】:

我正在研究一个 Prolog 示例作为教程。在这个例子中,我有一个带有零操作数的谓词,如下所示:

print_all_solutions :-
   findall(_,print_solution,_).

如何在控制台中调用print_all_solution? 当我在 Prolog 控制台中问这个问题时,我什么也没得到:

?- print_all_solutions

没有回答,还有:

?- print_all_solutions.

没有回答。

虽然我得到了其他问题的正确答案,例如:

 ?- goal(state([],right,[a,b,c,d],12)).
true.

 ?- goal(state([],right,[a,b,c,d],19)).
false.

我应该如何询问关于没有操作数 ( /0 ) 的谓词的问题,以便在控制台中查看解决方案?

【问题讨论】:

  • print_solutions 是如何定义的。这一切都取决于。

标签: prolog


【解决方案1】:

我猜你的问题是 init(State) 或更可能是 solve(State,Solution,EndState) 不起作用。

需要调试:查阅源文件后输入这些命令

?- leash(-all),trace.
?- print_solution.

你会从 Prolog 引擎中得到一些线索

【讨论】:

  • 谢谢,试过了,trace 回答 TRUE,但print_solution 仍然没有回答。 ?- leash(-all),trace.true.[trace] ?- print_solution.无人接听!
【解决方案2】:

我只是在控制台中输入了这个:

findall(_,print_all_solutions,_).

我得到了答案。

【讨论】:

  • 奇怪的是,这会给出任何答案,但输入print_all_solutions. 不会给出任何答案。 findall(_,print_all_solutions,_). 只是收集了print_all_solutions 提供的所有答案。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-04-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多