OCaml 中的 If 语句问题

问题描述 投票:0回答:1

我正在尝试在 OCaml 中编写以下代码:

let a = 0
let b = 1 

if a > b then 
  {
    print_endline "a";
    print_endline "a";
  }
print_endline "b"

然后我遇到了以下错误:

File "[21]", line 4, characters 0-2:
4 | if a > b then 
    ^^
Error: Syntax error

我尝试使用

begin
end
关键字。

ocaml
1个回答
6
投票

如果您正在编写一个程序(而不是在 REPL 中乱搞),那么只有某些结构可以存在于您的程序的顶层。

其中之一是绑定。所以下面的就可以了:

let a = 0
let b = 1 

但是条件表达式(if/else)是不允许的;也不是任何其他裸露的表达式,其中包括 local 绑定(let ... in ...)。我们可以通过将该表达式绑定到模式来解决这个问题。由于

print_endline
只会返回
()
,我们可以写:

let () =
  ...

在这种情况下,您使用

{
}
是不正确的,但您可以使用
;
(
)
将多个表达式分组。请记住,
;
不是“语句终止符”,而是一个分隔符

let () =
  if a > b then (
    print_endline "a";
    print_endline "a"
  );
  print_endline "b"

请注意,如果整个表达式返回

if
,则
else
只能在没有匹配
unit
的情况下存在。这符合该标准。

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