gpt4 book ai didi

arrays - 在 OCaml 中循环遍历数组的前 n 个元素

转载 作者:行者123 更新时间:2023-12-02 06:29:32 34 4
gpt4 key购买 nike

我在 OCaml 中有以下函数,它对作为参数传递的数组中的第一个 c 元素求和:

let rec sum_array c a =
if c < 0 then 0
else a.(c) + sum_array (c - 1) a;;

正好知道高级数组a是什么,所以想设置一下。我试过:

fun c -> let int_array = [| 1 ; 2 ; 3 ; 4 ; 5 |] in
let rec sum_array c =
if c < 0 then 0
else int_array.(c) + sum_array (c - 1);;

但是 OCaml 会提示一个模棱两可的“错误:语法错误”,这非常有帮助。

  1. 如何修改这个函数定义?如何指定要返回 sum_array 的值?
  2. 如何让 OCaml 报告更有帮助的错误消息?

最佳答案

从某种意义上说,您的问题是您在错误的位置添加了 fun c -> ...

假设你有这样一个函数:

let f count =
(count + 72 - 1) / 72

如果您想象硬编码值 72 是您想要预先计算的值,您可以按如下方式重写该函数:

let f =
let line_length = 72 in
fun count -> (count + line_length - 1) / line_length

您的代码将数组放在函数体之前,但它应该在函数体内部,在 let 和新的内部函数定义之间。

您的情况特别棘手,因为您的函数是递归的。所以你不能切换到 fun c -> ... 形式。相反,您可以在本地保留原始的基于 let 的定义。对于人为的示例,它看起来像这样:

let f =
let line_length = 72 in
let inner_f count =
(count + line_length - 1) / line_length
in
inner_f

(作为旁注,您的代码对数组的前 c+1 个元素求和,而不是前 c 个元素。)

关于arrays - 在 OCaml 中循环遍历数组的前 n 个元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43445502/

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