2013-02-21 54 views
1

1:如果一個查詢即ie。 a(X).返回多個答案,我如何讓程序一次返回所有答案和跟蹤。如何在swipl上運行prolog並一次返回所有跟蹤

2:我如何可以運行一個程序自動matically即打印a(X).所有的答案,當我comman後,裝載.pl文件到swipl即

% swipl -f foo.pl 

然後返回X

所有的答案

謝謝

回答

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) 
... 
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 
+0

我如何獲得所有的痕跡呢?我試過 swipl -s f.pl -g「trace,numbers(X),print(X),nl,fail。」 - 停止。 但它確實需要我按下輸入 – Newyo 2013-02-21 21:15:46