2017-11-25 15 views
0

2つの変更可能なリストを入力として受け取り、出力として2番目のリストに最初のリストを逆順に追加する関数を記述する必要があります。型定義は、次のとおりです逆変更可能なリストOcaml

type 'a mylist = 'a listcell ref 
    and 'a listcell = Nil | Cons of 'a * ('a mylist) 

私は定期的にリストを反転するかどうかは承知していますが、破壊的に最初のリストを変更することにより、これを行う関数を書く上で、いくつかの混乱が生じています。ここ は、私が持っているものですが、私は、型エラーを取得しておく:へ

let rec rev_app l1 l2 = 
    let rec rev_app' l3 l4 = 
    match !l1 with 
    | Nil -> l2 
    | Cons (x,t) -> ref (rev_app t (Cons(x,l4))) 
    in rev_app' l1 l2 

答えて

1

あなたの内側の呼び出しはrev_appに、ではないrev_app'にあります。だからあなたのコードは、次のように少し似ています:

let rec f x = ref (f x) 

実際のエラーを見積もるのは良いマナーです。単に "型エラー"と言ってもそれほど役に立ちません。

関連する問題