改进与 Ocaml 函数的匹配

Improve match with functions Ocaml

我正在学习 Ocaml,我想用 PF 的习惯来取代我从 C 语言而来的旧习惯,Java。。。 我习惯用“if...else...”语句来验证条件。 我看到 Ocaml 也提供了它们,但我想用 match ... with 或其他 PF 典型语句替换它们。

我的问题是我遗漏了一些重要的东西,例如,在这段代码中:

let find_max random  = 
  let rec support rlist max =
  match rlist with 
  | [] -> max
  | hd :: tl -> if hd > max then support tl hd else support tl max
let max = support random (List.hd random)
!max

let a = [1;2;3];
print_string "max element in list is : "
print_int (find_max a);
print_string "\n"

我想避免使用 if...else 语句并用一些 PF 典型语句更改它们。 我该怎么做?

最后一个:let max = support random (List.hd random) 是外部支持,但在 find_max 内,我该如何强调这一点?

P.S。 : 代码无效,let max = support random (List.hd random).

语法错误

首先,关于语法错误,除非它是顶层声明,否则构造是let x = e1 in e2。 (注意 in 关键字。)此外,语句序列由分号分隔,这只是 let () = e1 in e2.

的语法糖

其次,if then else 是一个完美地惯用的 OCaml 结构。删除它不会使代码更清晰。在您的情况下,我想您可以将其替换为 when.

let find_max random =
  let rec support rlist max =
    match rlist with
    | [] -> max
    | hd :: tl when hd > max -> support tl hd
    | hd :: tl -> support tl max in
  let max = support random (List.hd random) in
  max

let () =
  let a = [1;2;3] in
  print_string "max element in list is : ";
  print_int (find_max a);
  print_string "\n"