上一个练习大学类和无法工作似乎代表什么,我想在OCaml的语法正确的事情。我想功能sum_positive到列表中的所有的正整数总结成一个单一的int值和返回值。
let int x = 0 in
let rec sum_positive (ls: int list) = function
|h::[] -> x (*sum of positive ints in list*)
|[] -> 0
|h::t -> if (h >= 0) then x + h then sum_positive t else sum_positive t (*trying to ensure that sum_positive t will still run after the addition of x + h*)
在编译我遇到了这个错误,
File "functions.ml", line 26, characters 34-38:
Error: Syntax error
这指向然后再声明我在那里,我知道它不能正常工作,但我不认为任何其他表示那会的。
你有if ... then ... then
这在语法上不合法。
看来你要问是怎么写你心目中的方式,在语法上是有效的。但目前还不清楚是什么,你的想法。
您可以通过将其与;
分离评估OCaml的顺序(一个接一个)两个表达式。也许那是你的想法。
然而在我看来,你的代码已经不仅仅是语法更大的问题。您似乎正在尝试使用x
作为计算的累计总和。你应该知道,像x
OCaml的变量是不可变的。一旦你说let x = 0
,该值不能再更改。 x
将始终为0 x + h
不改变x
的值的表达式。它只是计算为一个新值。
通常的方法,使这项工作是通过x
作为函数参数。
我得到的是曾参与的参数的问题,我相信这是因为我想为int值添加到int类型列表的功能。这是我结束了。
let rec sum_positive = function
|[] -> 0
|h::t -> if h > 0 then h + (sum_positive t) else sum_positive t
简单了很多比我想象出来的人。