SML: syntax error: replacing FUN with VAL
SML: syntax error: replacing FUN with VAL
我正在尝试用 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#),但是交互式没有抱怨的版本是:
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
我正在尝试用 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#),但是交互式没有抱怨的版本是:
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