Classificação topológica no OCaml

Estou tentando escrever a classificação topológica no ocaml, mas sou iniciante (nos algoritmos OCaml e de gráficos) e não consigo fazer isso sozinho.

É mais fácil para mim pensar em classificação topológica, por exemplo, em C ++ (e há muitos exemplos de classificação topológica em C ++ na Internet), mas quero aprender algo novo. Além disso, encontrei alguns exemplos de classificação topológica escritos no OCaml, mas não os entendo, francamente.

Digamos que eu tenho uma lista(int * int list) list, por exemplo:

myList = [(1, [2]); (5, [6; 7]); (3, [2]); (6, [3; 7]); (8, [7]); (4, [3; 1])];;

e isso significa que eu preciso "fazer" a tarefa1 antes da tarefa2tarefa4 antes das tarefas3 e1 etc.

Eu acho que essa saída para esta lista deve ser:

[8; 5; 6; 7; 4; 3; 1; 2]

(no entanto, não tenho certeza, porque acabei de fazer este exemplo, por isso, se estiver errado, corrija-me, por favor)

Além disso, eu li que esse tipo de topologia não funciona para ciclos em gráficos; portanto, deve haver algum tipo de condição para ciclos - quando determinado gráfico tem ciclo (s), geramos exceção (acho que é uma boa ideia) .

AFAIK, preciso usar o DFS no algoritmo para classificação topológica, que (DFS) não sei implementar no OCaml (entendo a ideia principal, mas não seisentir, como isso funciona na OCaml / programação funcional).

Eu realmente aprecio sua ajuda para me entender esses conceitos (refiro-me à classificação topológica, DFS em OCaml / programação funcional). Se você puder, seria ótimo se você me mostrar exemplos de códigos, porque a leitura de código é (para mim) o melhor método para entender o conceito de algoritmo.

Eu sei que para a maioria de vocês esta é uma pergunta simples, mas espero que isso não impeça que você me ajude.

PS: Estou aprendendo o OCaml sozinho (estou no ensino médio), por isso não tenho sólida formação teórica (no OCaml ou em algoritmos). Comecei a aprender o OCaml, porque queria entender o conceito de recursão, e agora essa linguagem parece ser interessante, porque é realmente diferente do C ++, então ainda estou tentando aprender algo novo no OCaml.

questionAnswers(3)

yourAnswerToTheQuestion