列表ocaml中的最大整数

列表ocaml中的最大整数,ocaml,Ocaml,我想在int列表中找到max元素。 我们的想法是只给find_max打一次电话,让支持人员来完成这项肮脏的工作。 函数支持返回一个int,第一个值是0,然后当找到一个新的最大值时,它的值被保存,添加到结果中,之前的最大值被更改,其值从结果中扣除 这是因为: old_max = x result = 0 + old_max 找到一个新的最大值: new_max= y result = result - oldmax + new_max 因此,我将保存new_max的值: 显然,上面的代码是明确

我想在int列表中找到max元素。 我们的想法是只给find_max打一次电话,让支持人员来完成这项肮脏的工作。 函数支持返回一个int,第一个值是0,然后当找到一个新的最大值时,它的值被保存,添加到结果中,之前的最大值被更改,其值从结果中扣除

这是因为:

old_max = x
result = 0 + old_max
找到一个新的最大值:

new_max= y
result = result - oldmax + 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行!回来语法错误明显:/on

没有构造let=。。。;在OCaml中,本地定义使用let..=。。。在里面您可能希望避免使用;;我也是初学者

此外,结构等式为=而非=。同样,作为初学者,您不应该在代码中使用List.hd和List.tl。模式匹配始终是最佳选择。 通常,这些功能的所有用途都可以用一个简单的:

match rlist with
| [] -> 0
| hd :: tl -> ...
它更短、更清晰,并消除了错误处理空列表的可能性。 您的逻辑也不必要地复杂,而不是使用

您可以直接使用

hd
然后你打电话给支持部门,理由太多了。
我们可能需要使用let=。。。计算效果时,而不是使用

嘿,你现在问了三个问题,其他的都是,答案是一样的:不使用let。。。在里面语法正确。这在对第一个问题的回答中得到了很好的解释:。我想你最好去仔细阅读,把它内化,并熟悉基本的语法规则。嗨@Yawar,是的,我知道我有点紧张,很抱歉。但现在我或多或少明白了如何使用let…in。Ocaml的官方文档不是很好,我在这里读到了:Ocaml.org/learn/tutorials/basics.html,但最近我学到了很多东西。看看我最新的问题,你会发现我希望我会做得更好。我需要1-2个东西,我得到了。我有一些问题与匹配和它的情况……这种编程对我来说有点困难…我更喜欢C,C++,java……这对我来说很奇怪…你知道我在哪里可以阅读和了解更多的了解这种编程语言背后的机制吗?对我来说,很难把重点放在机制上……我想你会看到我像C、Java一样编码……我仍然不懂函数式编程风格,但我想。
-max + hd + support tl hd
hd