作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我在 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 会提示一个模棱两可的“错误:语法错误”,这非常有帮助。
sum_array
的值?最佳答案
从某种意义上说,您的问题是您在错误的位置添加了 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/
我是一名优秀的程序员,十分优秀!