3

嘿,我是 prolog 的新手,想知道:

假设我有这个代码:

component(a,b).  
component(a,c).   
component(a,d).  
component(b,e).  
component(b,f).

我想创建一个 consistsof(X,Y):- component(X,Y); component(Y,Z). 给我的论点:

Y= b,c,d,e,f

所以我想得到“a”的结果加上“a”的结果与(b,e)和(b,f)相连。如果我不是很具体,我很抱歉。

4

1 回答 1

2

我会使用传递闭包

part_of(Object, Part) :-
    component(Object, C), (Part = C ; part_of(C, Part)).

setof /3

?- setof(C, part_of(a,C), L).
L = [b, c, d, e, f].

请注意,这需要一个无环图,否则将永远循环

于 2014-01-21T16:08:46.367 回答