【问题标题】:Ocaml: recursion on a list of tuplesOcaml:在元组列表上递归
【发布时间】:2019-10-04 04:21:10
【问题描述】:

我有以下函数表,它接受一个元组列表(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) 列表的表达式

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

【问题讨论】:

    标签: recursion functional-programming ocaml


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-02-20
      • 1970-01-01
      • 2018-03-14
      • 1970-01-01
      • 2015-12-03
      相关资源
      最近更新 更多