SWI-Prolog, Определение компонентов связности графа

Здравствуйте Уважаемые программисты! Помогите пожалуйста решить данную лабораторную работу по swi prolog с пояснением для чайника и с запросом для проверки работоспособности программы в программе swi prolog, так как я слаб в swi prolog. как например для этой программы: Сама программа:

lab2([],_,[]).
lab2(_,[],[]).
% Вначале проверяется 1 и 2 список на пустоту, если они пустые, то в конце выходит пустой список.
lab2([A1|B1],[H1|T1],[[A1,H1]|C]) :- lab2(B1,T1,C).
% Затем из 1 и 2 списка берутся первые значения и добавляются в выходной список на первое место.
% Далее вызывается эта же программа, но уже с хвостами 1 и 2 списка.
% И затем также полученный результат добавляет в хвост полученного списка.

И запрос для нее: ?- lab2([1,2],[3,4], С).

Напишите программу, определяющую компоненты связности данного графа. Результатом работы программы должен быть список списков (компонента связности – список вершин).

Вот что у меня есть но не знаю правильно ли:
edge(1, 3).
edge(2, 3).
edge(1, 2).
node(1).
node(2).
node(3).


Для начала теорию графов почитать надо.

спасибо большое