如何获得导致特定输出的所有答案

时间:2016-06-16 16:35:01

标签: prolog

所以我从Prolog开始并有一个示例任务,我有一些点形成一个迷宫,我想知道所有可以通向节点1的节点。

connected(1,2).
connected(3,4).
connected(5,6).
connected(7,8).
connected(9,10).
connected(12,13).
connected(13,14).
connected(15,16).
connected(17,18).
connected(19,20).
connected(4,1).
connected(6,3).
connected(4,7).
connected(6,11).
connected(14,9).
connected(11,15).
connected(16,12).
connected(14,17). 
connected(16,19).

reachable(X,Z) :- connected(X,Z).
reachable(X,Z) :- connected(X,Y),reachable(Y,Z).

我使用了以下查询:     reachable(X,1). 这导致了一个简单的假,而不是所有导致1的节点。 另一方面,我期待这样的事情:

x = 4;

应该注意,这是一个有向图。

1 个答案:

答案 0 :(得分:1)

如果我执行查询reachable(X,1).,我会得到预期的结果:

?- reachable(N,1).
N = 4 ;
N = 3 ;
N = 5 ;
N = 6 ;
false.

基于以下图表,人们期望的是:

graph showing the connections

生成:dot -Tpng < conn.dot > conn.pngconn.dot

digraph G {
    1 -> 2;
    3 -> 4;
    5 -> 6;
    7 -> 8;
    9 -> 10;
    12 -> 13;
    13 -> 14;
    15 -> 16;
    17 -> 18;
    19 -> 20;
    4 -> 1;
    6 -> 3;
    4 -> 7;
    6 -> 11;
    14 -> 9;
    11 -> 15;
    16 -> 12;
    14 -> 17;
    16 -> 19;
}

请检查您的Prolog文件中是否有小错字或空格错误。