Syntax SML:语法错误:将FUN替换为VAL

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

我正在尝试用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 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的初学者,不知道括号是必要的