【发布时间】:2011-07-10 19:57:25
【问题描述】:
所以这是我从另一种语言 (Lisp) 翻译的一个函数,主要是逐字逐句。不过我觉得不太对劲,使用ref、if 而不使用else 等会怎样。您将如何重写下面的第二个函数?
let directEdges node edges =
List.filter (fun (a, b) -> a = node) edges
let getConnected node edges =
let visited = ref Set.empty
let rec traverse node =
if not (Set.contains node !visited) then
visited := Set.add node !visited
directEdges node edges
|> List.iter (fun (a, b) -> traverse b)
traverse node
!visited
编辑:代码甚至不需要使用 Set;原来只是用了一个列表。
【问题讨论】:
标签: f# refactoring idioms