我需要编写一个函数,它将两个可变列表作为输入,并且作为输出,第一个列表反转附加到第二个列表。类型定义是:
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
答案 0 :(得分:1)
您的内心呼唤是rev_app
,而不是rev_app'
。所以你的代码有点类似于说:
let rec f x = ref (f x)
作为旁注,引用你得到的实际错误是很好的举止。只是说"类型错误"并非如此有用。