Ocaml语法错误:构建zip函数时需要模式

Ocaml语法错误:构建zip函数时需要模式,ocaml,ocamlbuild,ocamllex,ocamlyacc,ocamlfind,Ocaml,Ocamlbuild,Ocamllex,Ocamlyacc,Ocamlfind,我想做一个叫做zip的函数: zip[1;2;3;4][5;6;7;8]将产生:[1;5;2;6;3;7;4;8] 但我有一个错误: 第4行h2::t2生成错误语法错误:预期模式 正确的语法是什么? let rec zip lst1 lst2 = match lst1 lst2 with | [] [] -> [] | h1::t1 h2::t2 -> h1 h2::zip t1 t2 |_ _ -&

我想做一个叫做zip的函数:
zip[1;2;3;4][5;6;7;8]将产生:[1;5;2;6;3;7;4;8]

但我有一个错误: 第4行h2::t2生成错误语法错误:预期模式

正确的语法是什么?

let rec zip lst1 lst2 =
    match lst1 lst2  with
    | [] [] -> []
    | h1::t1 h2::t2 -> h1 h2::zip t1 t2                         
    |_ _ -> failwith "The lists seems to have different lengths";;


模式
匹配
一次只能与一个表达式匹配。如果要匹配两个列表,即两个表达式,则需要将它们组合成一个表达式。实现这一点的惯用方法是使用元组将它们配对,例如:


从技术上讲,将表达式放入元组的语法是
(e1,e2,…,en)
;但是当它是明确的,例如被其他优先的符号或关键字包围时,OCaml允许省略括号,只使用逗号。

谢谢您的回答!!!还有更多的问题!我如何使用zip函数应用n-list??我想像这样压缩压缩[1;2;3;][4;5;6][7;8;9]->[1;4;7;2;5;8;3;6;9]这样。您需要编写一个包含三个参数的函数
zip3
。一般来说,对于n个参数,您将需要一个单独的函数
zipN
。我想使用n元zip函数,但在模式匹配方面遇到了麻烦。ㅠㅠ 输入是一个列表列表,输出是一个类似于[1;2;3];[4;5;6];[7;8]->[1;4;7;2;5;8;3;6]的列表,让nzip lst=match with lst@Cyber0946,您可以像任何列表一样对n元列表进行模式匹配:使用基本情况(空列表)和归纳情况(列表头和尾)。但是您将面临的主要问题是根据输入列表的数量输出任意大小的压缩元组。元组的大小是静态的,所以(我知道)没有办法(用一个函数)做到这一点。
match lst1, lst2 with
| [], [] -> []
| h1::t1, h2::t2 -> (h1, h2)::(zip t1 t2)
| _ -> failwith "Cannot zip lists of different lengths"