Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
List 使用OCaml修剪成对的列表_List_Recursion_Ocaml - Fatal编程技术网

List 使用OCaml修剪成对的列表

List 使用OCaml修剪成对的列表,list,recursion,ocaml,List,Recursion,Ocaml,我试图过滤一个成对的列表,并返回一个只包含每对的第一个元素的新列表。输入/输出应如下所示: input = [('A', 3); ('B', 2); ('D', 1)] output = ['A'; 'B'; 'D'] let v = expr1 in expr2 let f l = function ... 到目前为止,我掌握的代码如下: let rec trimList l = function | [] -> [] | head::tail -> let l' = [f

我试图过滤一个成对的列表,并返回一个只包含每对的第一个元素的新列表。输入/输出应如下所示:

input = [('A', 3); ('B', 2); ('D', 1)]

output = ['A'; 'B'; 'D']
let v = expr1 in expr2
let f l = function ...
到目前为止,我掌握的代码如下:

let rec trimList l = function
| [] -> []
| head::tail -> let l' = [fst head] @ trimList List.tl l;;
但我得到了以下错误:

Line 3, characters 59-61:
3 |     | head::tail -> let l' = [fst (head)] @ trimList List.tl l;;
                                                           ^^
Error: Syntax error
我不知道为什么这不起作用。我知道这很简单,但我对OCaml还是新手。
非常感谢您的帮助。

您的语法问题是由于您的
let
中没有相应的

let表达式如下所示:

input = [('A', 3); ('B', 2); ('D', 1)]

output = ['A'; 'B'; 'D']
let v = expr1 in expr2
let f l = function ...
本质上,这建立了一个局部变量
v
,其值为
expr1
,其值为
expr2
(可能包含变量
v

let表达式的
部分缺少

另一个注释是,如果您定义这样的函数:

input = [('A', 3); ('B', 2); ('D', 1)]

output = ['A'; 'B'; 'D']
let v = expr1 in expr2
let f l = function ...
您正在定义一个包含两个参数的函数。有一个由
函数
关键字定义的隐式参数;该参数与以下模式匹配

您很可能希望从函数定义中删除
l

您的代码还有一些其他问题,但我希望这有助于取得进展。

我认为“let”是一个错误。使用
|head::tail->[fst(head)]@trimList(List.tl l)
代码更有意义。在这种情况下,我会指向阅读
,模式匹配已经绑定了
尾部
,因此不需要
List.tl