首页 > 解决方案 > Prolog 跟踪输出到搜索树

问题描述

我正在尝试将跟踪输出从 prolog 转换为搜索树,但我不确定它是否正确。任何有关如何根据跟踪信息制作搜索树的帮助表示赞赏。

Database/Input:

rara([X|L],A,M):- 
    rara(L,[Y|A],M).

rara([M|L],L,[M]).

rara(L,M):- 
    rara(L,[],M). 

Query:

rara([a,b,c,d],X).

Trace output:
Call: (8) rara([a, b, c, d], _G922) ? creep
Call: (9) rara([a, b, c, d], [], _G922) ? creep
Call: (10) rara([b, c, d], [_G1043], _G922) ? creep
Call: (11) rara([c, d], [_G1046, _G1043], _G922) ? creep
Call: (12) rara([d], [_G1049, _G1046, _G1043], _G922) ? creep
Call: (13) rara([], [_G1052, _G1049, _G1046, _G1043], _G922) ? creep
Fail: (13) rara([], [_G1052, _G1049, _G1046, _G1043], _G922) ? creep
Redo: (12) rara([d], [_G1049, _G1046, _G1043], _G922) ? creep
Fail: (12) rara([d], [_G1049, _G1046, _G1043], _G922) ? creep
Redo: (11) rara([c, d], [_G1046, _G1043], _G922) ? creep
Fail: (11) rara([c, d], [_G1046, _G1043], _G922) ? creep
Redo: (10) rara([b, c, d], [_G1043], _G922) ? creep
Fail: (10) rara([b, c, d], [_G1043], _G922) ? creep
Redo: (9) rara([a, b, c, d], [], _G922) ? creep
Fail: (9) rara([a, b, c, d], [], _G922) ? creep
Fail: (8) rara([a, b, c, d], _G922) ? creep

当前搜索树:

                     rara([a,b,c,d],X).

                |                                 |
   rara([a, b, c, d], _G922)          rara([b, c, d], [_G1043], _G922)
   X = _G922                                   |        
                                rara([c, d], [_G1046, _G1043], _G922)  
                                           |
                      rara([d], [_G1049, _G1046, _G1043], _G922)
                                        |
               rara([], [_G1052, _G1049, _G1046, _G1043], _G922)

标签: debuggingprologbinary-search-treetrace

解决方案


推荐阅读