以下代码在https://try.ocamlpro.com/上运行没有错误
open Printf
let l = ref [] in
for i = 3 downto 0 do
l := i :: !l
done;
List.iter (printf "%d " ) !l
但在 Linux 上使用ocamlopt
orocamlc
编译器时会触发语法错误。
ocamlc array.ml -o array
let l = ref [] in
^^
Error: Syntax error
语法错误可能隐藏在您未包含的代码中。你写的似乎很可能
open Printf
let l = ref [] in
for i = 3 downto 0 do
l := i :: !l
done;
List.iter (printf "%d " ) !l
这是一个语法错误,因为顶级表达式不能跟在非表达式顶级项之后。这就是语法错误出现在in
:in
此位置仅允许顶级定义(因此没有)的原因。
这就是为什么通常建议使用顶级单元定义而不是表达式的原因:
open Printf
let () =
let l = ref [] in
for i = 3 downto 0 do
l := i :: !l
done;
List.iter (printf "%d " ) !l
有了这个小小的改变,你就只有顶级定义,你不需要记住顶级表达式的规则。
另一个简单的选择是考虑所有顶级表达式都应该通过以下方式引入;;
:
open Printf
;; let l = ref [] in
for i = 3 downto 0 do
l := i :: !l
done;
List.iter (printf "%d " ) !l
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句