我使用惰性列表的实现,其中类型可以是NilCons (value, thunk),其中thunk是一个函数从单元到列表的其余部分。

我试图写一个函数cross,作为List.combine做这将发挥作用。不幸的是,我在语法错误。

open Sequence;;
    let rec (cross : 'a Sequence.t -> 'b Sequence.t -> ('a * 'b) Sequence.t) = match seq1 with
        Nil -> match seq2 with
            Cons (value2, thunk2) -> Cons ((Nil, value2), function () -> (cross Nil (thunk2 ())))
      | Cons (value1, thunk1) -> match seq2 with
            Nil -> Cons ((value1, Nil), function() -> (cross Nil (thunk1 ())))
          | Cons (value2, thunk2) -> Cons ((value1, value2), function() -> (cross (thunk1 ()) (thunk2 ())))

此产生错误:

Error: Unbound value seq1

我究竟做错了什么?

<强>更新

此类型的检查,但并不我正在寻找。

的类型的
let rec cross (seq1 : 'a Sequence.t) (seq2 : 'b Sequence.t) : ('a * 'b) Sequence.t = match seq1 with
    Nil -> match seq2 with
        Cons (value2, thunk2) -> Cons ((Nil, value2), function () -> (cross Nil (thunk2 ())))
  | Cons (value1, thunk1) -> match seq2 with
        Nil -> Cons ((value1, Nil), function() -> (cross Nil (thunk1 ())))
      | Cons (value2, thunk2) -> Cons ((value1, value2), function() -> (cross (thunk1 ()) (thunk2 ())))

val cross :
  'a Sequence.t Sequence.t ->
  'a Sequence.t Sequence.t -> ('a Sequence.t * 'a Sequence.t) Sequence.t =
  <fun>

这是不,我想横的类型。我在寻找:

'a Sequence.t -> 'b Sequence.t -> ('a * 'b) Sequence.t
有帮助吗?

解决方案

你会踢自己...其中SEQ1定义?

let rec (cross : 'a Sequence.t -> 'b Sequence.t -> ('a * 'b) Sequence.t) =

您定义交叉的类型,但你不绑定变量的任何东西(我猜,你可以说)。

let rec cross (seq1:'a Sequence.t) (seq2:'a Sequence.t) :('a * 'b) Sequence.t =

编辑:

我觉得你的匹配很好,不匹配。周围使用情况begin ... end块,我认为正在发生的事情(因为我没有顺序,我无法验证)是比赛情况下,你打算为外比赛被施加到内侧一个,选配SEQ2。例如,

match x with
| 0 -> match y with
    | 1 -> "x:0, y:1"
| 2 -> match y with
    | 0 -> "y:0, x:2"

虽然,空间上,它看起来很好,第二匹配,match y with势必与| 2 -> ...相符。下面是围绕着比赛情况下,being ... end关键字版本。第二个开始......不需要结束,但它可能是一个好主意,为清楚起见做吧。

match x with 
| 0 -> begin match y with
    | 1 -> "x:0, y:1" end
| 2 -> begin match y with
    | 0 -> "y:0, x:2" end

其他提示

在第一线,你想对阵SEQ1,但这个值是未绑定的意义,它是无处可寻。

这是完全一样:

# let t =
  match t1 with
  _ -> ();;
Error: Unbound value t1

您必须命名你的论点。

有关更新后的问题,其原因的类型是'a Sequence.t Sequence.t是因为该行的

Cons ((Nil, value2), ...)

回想一下,Nil是序列本身,因此通过将有它迫使输入序列中的所有元素是序列太

当你提到尚未定义的名称(技术上“结合到一个出现此错误 值”)。如果您没有正确输入名称可能发生这种情况。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top