【发布时间】:2019-12-01 14:16:10
【问题描述】:
我有一种双向指针列表。我要做的是编写一个给定列表的过程,它应该返回一个仅包含奇数索引上的元素的列表。我是 OCaml 的新手,它的指针类型数据结构,这是我到目前为止所写的,但它不起作用。
错误:此表达式的类型为 'a elem 选项 但是需要一个类型为“b elem”的表达式
type 'a elem =
{
v : 'a;
mutable next: 'a lista;
mutable prev: 'a lista;
}
and 'a lista = 'a elem option
exception NOT_FOUND
let x = ref None;;
let value e =
match e with
| Some x -> x.v
| None -> raise NOT_FOUND;;
let generuj n x =
x := Some {v = 0; next = None; prev = None};
for i = 1 to n do
match !x with
| None -> assert false
| Some y ->
let z = ref { v = i; next = None; prev = None } in
y.next <- Some !z;
!z.prev <- Some y;
x := Some !z
done
let second l x =
let i = ref 0 in
while !l <> None do
let z = ref !x in
if (!i mod 2 = 0) then
x := {v = value !l; next = None; prev = Some !z}
else ();
let y = !l.next in
l := {v = value y; next = y.next; prev = None};
i := !i + 1
done;;
谁能帮我理解为什么它不起作用?
【问题讨论】:
-
在您发布的代码中... value 代表什么?
-
对不起,忘记补充我已经编辑了代码
-
你能不能再贴一个函数签名?
-
你没有找到。那是对的吗?应该是 Not_found 吗?
-
我已经发布了完整的代码和签名。 “Generuj”并不重要