如何在swipl上运行prolog并一次性返回所有跟踪

时间:2013-02-21 20:17:40

标签: prolog swi-prolog

1:如果一个查询即。 a(X).返回多个答案,如何让程序一次性返回所有答案和跟踪。

2:当我将a(X).文件加载到swipl时,即在comman

之后,如何自动运行程序,即打印.pl的所有答案
% swipl -f foo.pl

然后它返回X

的所有答案

谢谢

2 个答案:

答案 0 :(得分:4)

您需要leash以及跟踪

swipl -s f.pl -g "leash(-all),trace,numbers(X),print(X),nl,fail." -t halt
% /home/carlo/.plrc compiled 0.04 sec, 1,439 clauses
% /home/carlo/prolog/f.pl compiled 0.00 sec, 2 clauses
   Call: (6) numbers(_G1453)
   Call: (7) between(1, 10, _G1453)
   Exit: (7) between(1, 10, 1)
   Exit: (6) numbers(1)
   Call: (6) print(1)
1
   Exit: (6) print(1)
   Call: (6) nl

   Exit: (6) nl
   Call: (6) fail
   Fail: (6) fail
   Redo: (7) between(1, 10, _G1453)
   Exit: (7) between(1, 10, 2)
   Exit: (6) numbers(2)
   Call: (6) print(2)
2
   Exit: (6) print(2)
...

答案 1 :(得分:3)

这是一个带有简单子句的简单文件:

$> cat f.pl
numbers(X) :-
  between(1,10,X).

您可以使用-g选项设置目标:

$> swipl -s f.pl -g "numbers(X),print(X),nl,fail." -t halt.
% .../f.pl compiled 0.00 sec, 2 clauses
1
2
3
4
5
6
7
8
9
10
相关问题