Como representar grafos cíclicos direcionados em Prolog com acesso direto a verticies vizinhas

Eu preciso construir um grafo direcionado (em tempo de execução) com ciclos no Prolog e não sei como representá-lo. Minha exigência é que eu precise ir de um vértice ao seu vizinho em um tempo constante.

É possível representá-lo como uma árvore, por exemplo:

t(left_son,V,right_son)

mas como resolver os ciclos?

Eu posso fazer uma lista de arestas:

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

Ou apenas

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

mas como evitar chamar função 'membro' na lista enquanto procura por vizinhos, que custam tempo linear?

Obrigado pela ajuda

questionAnswers(3)

yourAnswerToTheQuestion