gpt4 book ai didi

recursion - Ocaml:元组列表的递归

转载 作者:行者123 更新时间:2023-12-02 09:07:39 25 4
gpt4 key购买 nike

我有以下函数表,它采用元组列表(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)

但是出现如下错误:

Error: This expression has type ('a * 'b list * 'c * 'd) list -> ('a * int) list but an expression was expected of type ('a * int) list

我不太确定我在那里做错了什么。

最佳答案

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 在您的函数中未使用,您可以将其删除。

关于recursion - Ocaml:元组列表的递归,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56176169/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com