小编use*_*869的帖子

FP家庭作业.是否可以使用嵌套模式匹配而不是辅助函数来定义函数?

我正在为ocaml中的Harvard CS 51编程课程解决编程方面的问题.问题是定义一个函数,它可以将字符列表压缩为对列表,其中每对包含列表中字符和字符本身的许多后续发生,即在将此函数应用于列表['a'之后;'a';'a';'a';'a';'b';'b';'b';'c';'d';'d';'d';'d']我们应该得到[(5,'a');(3,'b');(1,'c');(4,'d')]的列表.我想出了使用辅助功能的功能去解决这个问题:

let to_run_length (lst : char list) : (int*char) list =
  let rec go i s lst1 =
    match lst1 with
      | [] -> [(i,s)]
      | (x::xs) when s <> x ->  (i,s) :: go 0 x lst1
      | (x::xs) -> go (i + 1) s xs
        in match lst with
          | x :: xs -> go 0 x lst
          | [] -> []
Run Code Online (Sandbox Code Playgroud)

我的问题是:是否可以使用嵌套模式匹配定义递归函数to_run_length,而无需定义辅助函数go.在这种情况下,我们如何存储已传递元素的计数器状态?

algorithm ocaml functional-programming

4
推荐指数
1
解决办法
367
查看次数

标签 统计

algorithm ×1

functional-programming ×1

ocaml ×1