Syntax SML:语法错误:将FUN替换为VAL
我正在尝试用ml编写一个类似于for循环的函数(是的,我知道这不是语言应该如何工作)。这是我到目前为止的代码:Syntax SML:语法错误:将FUN替换为VAL,syntax,syntax-error,ocaml,sml,Syntax,Syntax Error,Ocaml,Sml,我正在尝试用ml编写一个类似于for循环的函数(是的,我知道这不是语言应该如何工作)。这是我到目前为止的代码: fun for (f:int->unit) start_i:int end_i:int = let fun for2 (f:int->unit) start_i:int end_i:int i:int = if i=end_i - 1 then f i else (f i; for2 f start_i en
fun for (f:int->unit) start_i:int end_i:int =
let fun for2 (f:int->unit) start_i:int end_i:int i:int =
if i=end_i - 1 then
f i
else
(f i;
for2 f start_i end_i (i + 1))
in
for2 f start_i end_i start_i
end
但是sml(以及Ocaml)给了我这个错误:
test.ml:1.2-1.5 Error: syntax error: replacing FUN with VAL
test.ml:2.6-2.9 Error: syntax error: replacing FUN with VAL
所以,我的函数签名有问题。但我找不到它是什么。你能帮我吗
谢谢我不确定这是否也可以在ocaml中编译(是f#),但interactive没有抱怨的一个版本是:
let rec for2 (body: int->unit) iStart iEnd =
if iStart = iEnd then ()
else
body iStart;
for2 body (iStart+1) iEnd
您的类型批注不正确。所有参数都需要参数
fun for (f:int->unit) (start_i:int) (end_i:int) =
let fun for2 (f:int->unit) (start_i:int) (end_i:int) (i:int) =
if i=end_i - 1 then
f i
else
(f i;
for2 f start_i end_i (i + 1))
in
for2 f start_i end_i start_i
end
在我看来,这不像是一个“真实”的循环。它抛出了相同的语法错误,
(body:int->unit)
在运行ocaml的地方启动了我的freebsd。在那里,唯一使其编译的更改是在body调用后额外的分号。感谢它现在对sml起作用,我不得不用fun
替换let rec
,并在最后两个语句中添加括号。谢谢,我自己也算出来了。我还是ml的初学者,不知道括号是必要的