我不知道如何从类型的可变列表中删除循环:从ocaml中的循环/可变列表中删除循环?
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是否有循环。我希望以破坏性的方式(更新参考文献)或坚持不懈地(创建新列表)来做到这一点。
谢谢!