タイプの可変リストからサイクルを削除する方法がわかりません。
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 ()
m_listにサイクルがあるかどうかを通知するis_cyclic関数があります。これを破壊的に(参照を更新する)または破壊的に(新しいリストを作成する)のいずれかで実行したいと思います。
ありがとう!