Ocaml:元组列表上的递归

字符

我有下面的函数表,其中包含一个元组列表(x是字符串,y是字符串列表),我想返回一个元组x1和列表y1的长度。我用这个简单的功能试了一下:

let rec table lst = function
    | [] -> []
    | [(x1, y1, x2, y2)] -> [(x1, (List.length y1))]
    | (x1_h, y1_h, x2_h, y2_h) :: tail -> (x1_h, (List.length y1_h))::(table tail)

但是发生了以下错误:

错误:此表达式的类型为('a *'b列表*'c *'d)列表->('a * int)列表,但是期望表达式为('a * int)列表类型

我不确定自己在哪里做错了。

格伦斯

function隐式接受一个参数,并对此进行模式匹配。换一种说法:

let f = function | ...

相当于

let f lst = match lst with | ...

所以当你写

let rec table lst = function | ...

转化为

let rec table lst lst2 = match lst2 with | ...

该错误指向递归调用,table tail因为它被部分应用并返回一个函数('a * 'b list * 'c * 'd) list -> ('a * int)table tail tail将按('a * int list)预期返回并且完全有效。但是由于lst您的函数中未使用它,因此您可以删除它。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章