我有一个图表,实现为连接任意节点的边列表,下面定义了数据类型 .
type edge = int * int;; type graph = edge list;;
如何在避免陷入循环的同时执行纯功能深度优先搜索?我不太清楚如何跟踪所有访问过的节点,同时保持纯粹的功能 . 答案可能是微不足道的,我不是出于某种原因在概念上 grab 了 .
搜索功能具有跟踪被访问节点的参数 . 在FP中,其中一个见解是你可以越来越深入地调用(使用尾调用) . 因此,您可以在所有调用中传递参数,随时添加新节点 .
另一个参数可能是您计划稍后访问的节点 . 对于DFS,这将像堆栈一样工作 .
1 回答
搜索功能具有跟踪被访问节点的参数 . 在FP中,其中一个见解是你可以越来越深入地调用(使用尾调用) . 因此,您可以在所有调用中传递参数,随时添加新节点 .
另一个参数可能是您计划稍后访问的节点 . 对于DFS,这将像堆栈一样工作 .