У меня есть граф, который реализован как список ребер, соединяющих произвольные узлы, с типами данных, определенными ниже.
type edge = int * int;;
type graph = edge list;;
Как мне выполнить чисто функциональный поиск в глубину, избегая при этом застревания в цикле? Я не совсем уверен, как отслеживать все посещенные узлы, оставаясь при этом чисто функциональным. Ответ, вероятно, является чем-то тривиальным, что я по какой-то причине концептуально не понимаю.