2014-01-21 5 views
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

, поэтому я хочу, чтобы получить результат "а" плюс результат тех "а" связанных с (b, e) и (b, f). Мне жаль, если я не очень конкретный.

ответ

3

Я хотел бы использовать транзитивное замыкание

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]. 

примечание это требует ациклический граф, или бесконечный цикл