Nil
タイプが または のいずれかCons (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