改进与 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"
我正在学习 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"