我不确定如何从可变类型列表中删除循环:
type 'a m_list = Nil | Cons of 'a * (('a m_list) ref)
例如,如果我有一个列表 3,2,2,1,2,1,2,1,..... 我想要一个 3,2,2,1。
我想不通的是初始循环的位置——我有一个看起来像这样的递归,但我不知道如何将它包装成一个递归函数;显然在这里它只会检查前几个术语。
let remove list : unit =
if is_cyclic list then match list with
|Nil->()
|Cons(_,v)-> match (!v) with
|Nil->()
|Cons(_,x)->match (!x) with
|Nil->()
|Cons(_,y)->match (!y) with
|Nil->()
|Cons(_,p) -> if is_cyclic (!p) then p:=Nil else ()
我有一个 is_cyclic 函数,它告诉我 m_list 是否有循环。我想以破坏性方式(更新参考)或非破坏性方式(创建新列表)来执行此操作。
谢谢!