Ocaml 我可以合并这个代码吗?还是有更好的解决方案?
我正在创建一个函数,将整数列表中的所有数字相加。以下是我当前的解决方案:Ocaml 我可以合并这个代码吗?还是有更好的解决方案?,ocaml,higher-order-functions,Ocaml,Higher Order Functions,我正在创建一个函数,将整数列表中的所有数字相加。以下是我当前的解决方案: 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.f
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
,我觉得我可以创建一些功能来防止这种情况。我不会给你答案,因为如果你能自己找到它会更好,但我会给你一些提示来找到它
int list
的所有元素求和,这是您已经对list.fold_left(+)acc head执行的操作
我甚至不能提供一个框架,因为它可以为您提供即时解决方案。有一个单行实现,是的。您可以使用两个嵌套的折叠来计算整个结果。还要注意,您的值
acc
没有实际用途。它是一个不可变的0值。因此,您可以在所有的acc
中使用0。从任何意义上讲,它肯定不是一个累加器。