我不知道如何從類型的可變列表中刪除循環:從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是否有循環。我希望以破壞性的方式(更新參考文獻)或堅持不懈地(創建新列表)來做到這一點。
謝謝!