我怎么能效仿这一结果如果然后再声明,同时使用正确的语法?

问题描述 投票:-1回答:2

上一个练习大学类和无法工作似乎代表什么,我想在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

这指向然后再声明我在那里,我知道它不能正常工作,但我不认为任何其他表示那会的。

syntax syntax-error ocaml
2个回答
1
投票

你有if ... then ... then这在语法上不合法。

看来你要问是怎么写你心目中的方式,在语法上是有效的。但目前还不清楚是什么,你的想法。

您可以通过将其与;分离评估OCaml的顺序(一个接一个)两个表达式。也许那是你的想法。

然而在我看来,你的代码已经不仅仅是语法更大的问题。您似乎正在尝试使用x作为计算的累计总和。你应该知道,像x OCaml的变量是不可变的。一旦你说let x = 0,该值不能再更改。 x将始终为0 x + h不改变x的值的表达式。它只是计算为一个新值。

通常的方法,使这项工作是通过x作为函数参数。


0
投票

我得到的是曾参与的参数的问题,我相信这是因为我想为int值添加到int类型列表的功能。这是我结束了。

let rec sum_positive = function
|[] -> 0
|h::t -> if h > 0 then h + (sum_positive t) else sum_positive t

简单了很多比我想象出来的人。

© www.soinside.com 2019 - 2024. All rights reserved.