我可以合并此代码吗?或者有更好的解决方案吗?

问题描述

我正在创建一个函数,它将整数列表列表中的所有数字相加。这是我目前的解决方案:

let rec super_sum (nlists : int list list) : int =
  let acc = 0 in
  match nlists with
  | [] -> 0
  | head :: tail ->
    match tail with 
    | [] -> List.fold_left (+) acc head
    | list -> List.fold_left (+) acc head + super_sum list ;;

我觉得我可以巩固一下。我使用了 List.fold_left (+) acc head 两次,我觉得我可以创建一些可以防止这种情况发生的函数

解决方法

我不会给你答案,因为如果你能自己找到它会更好,但我会给你一些找到它的提示。

  1. 您需要做的第一件事是对 int list 的所有元素求和,这就是您已经对 List.fold_left (+) acc head

  2. 您现在需要做的第二件事是迭代您的列表列表,并对您在第一步计算的总和求和。问题是,您已经知道如何在此步骤中对整数列表求和,因此无需对元素求和,只需对元素的总和求和

我什至无法提供框架,因为它可以为您提供即时解决方案。