Как представить ориентированный циклический граф в Прологе с прямым доступом к соседним вершинам

Мне нужно построить ориентированный граф (во время выполнения) с циклами в Прологе, и я не уверен, как его представить. Мое требование заключается в том, что мне нужно добраться от одной вершины до его соседки за постоянное время.

Можно ли представить его в виде дерева, например:

t(left_son,V,right_son)

но как решить циклы?

Я могу составить список ребер:

graph([a,b,c,d],[e(a,b),e(b,c),e(c,a),e(c,d)])

Или просто

[a->[b],b->[c],c->[a,d],d->[]]

 но как избежать вызова функции «член»; в списке при поиске соседей, которые стоят линейного времени?

Спасибо за вашу помощь

Ответы на вопрос(3)

Ваш ответ на вопрос