【发布时间】:2020-06-21 14:47:59
【问题描述】:
我想在一个 int 列表中找到最大元素。
我们的想法是只给find_max 打一次电话,然后让support 来做脏活。
函数support返回一个int,第一个值为0,然后当找到一个新的max时,它的值被保存,添加到结果中,之前的最大值被改变并从结果中减去它的值。
这是因为:
old_max = x
result = 0 + old_max
找到一个新的最大值:
new_max= y
result = result - oldmax + new_max
所以我会保存new_max 的值:
0 + old_max - old_max + new_max = new_max`.
显然上面的代码是解释性的,这是我的真实代码:
let find_max random =
let rec support rlist max =
if rlist==[] then 0
else
if (List.hd rlist) > max
then -max + (List.hd rlist) + support (List.tl rlist) (List.hd rlist)
else support (List.tl rlist) max ;;
let return = support random 0 0 ;
!return;;
let a = [1;2;3];
print_string "max element in list is : "
print_int (find_max a);
print_string "\n"
错误在第 9 行 !return;;,语法错误(显然是 :/)在 ;;
【问题讨论】:
-
嘿,您现在已经问了三个问题(其他问题是 stackoverflow.com/q/62484643/20371 和 stackoverflow.com/q/62497947/20371 ),答案是一样的:没有正确使用
let ... in ...语法。这在您的第一个问题的答案中得到了很好的解释:stackoverflow.com/a/62488711/20371。我认为你最好去仔细阅读以内化它,并熟悉基本的语法规则。 -
嗨@Yawar,是的,我知道我有点压力,对此感到抱歉。但是现在我(或多或少)了解了如何使用“let...in”。 Ocaml 的官方文档不太好我从这里读到它:ocaml.org/learn/tutorials/basics.html 但这些天我学到了很多东西。看看我最近的问题,你会发现我会变得更好(我希望):stackoverflow.com/questions/62531154/…。我还需要 1-2 样东西,我得到了。
标签: ocaml