在 Ocaml 中调用函数内部函数时出现语法错误
Syntax error when Calling function inside function in Ocaml
我在调用函数f和g时出现语法错误lp 并将它们分配给 y 和 z
let lp m =
let y = f m in
let z = g y (List.length y) m;
这是我的完整代码:
open Printf
open Format
let regraUm m = m/2
let regraDois m = ((m / 10) mod 10) * (m mod 10)
let regraTres m = 42
let f m =
let list = ref [] in
if ((m mod 2) = 0) then list := 1::!list;
if ((m mod 3) = 0) || ((m mod 4) = 0) then list := 2::!list;
if ((m mod 5) = 0) then list := 3::!list;
!list
let g list len m =
let res = ref [] in
for i = 0 to (len-1) do
let regra = List.nth list i in
if (regra = 1) then res := (m - (regraUm m))::!res;
if (regra = 2) || ((m mod 4) = 0) then res := (m - (regraDois m))::!res;
if (regra = 3) then res := (m - (regraTres m))::!res;
done;
!res
let lp m =
let y = f m in
let z = g y (List.length y) m;
语法错误:
ocamlopt regras.ml -o r
File "regras.ml", line 33, characters 4-4:
Error: Syntax error
f 和 g 在函数外部使用时可以正常工作。
let 绑定需要在 in
之后附加一些表达式,在您的情况下不存在。在这种情况下,您的代码可以将 z
添加为表达式或删除绑定,只留下表达式。
let lp m =
let y = f m in
let z = g y (List.length y) m in
z
或者这个
let lp m =
let y = f m in
g y (List.length y) m
我在调用函数f和g时出现语法错误lp 并将它们分配给 y 和 z
let lp m =
let y = f m in
let z = g y (List.length y) m;
这是我的完整代码:
open Printf
open Format
let regraUm m = m/2
let regraDois m = ((m / 10) mod 10) * (m mod 10)
let regraTres m = 42
let f m =
let list = ref [] in
if ((m mod 2) = 0) then list := 1::!list;
if ((m mod 3) = 0) || ((m mod 4) = 0) then list := 2::!list;
if ((m mod 5) = 0) then list := 3::!list;
!list
let g list len m =
let res = ref [] in
for i = 0 to (len-1) do
let regra = List.nth list i in
if (regra = 1) then res := (m - (regraUm m))::!res;
if (regra = 2) || ((m mod 4) = 0) then res := (m - (regraDois m))::!res;
if (regra = 3) then res := (m - (regraTres m))::!res;
done;
!res
let lp m =
let y = f m in
let z = g y (List.length y) m;
语法错误:
ocamlopt regras.ml -o r
File "regras.ml", line 33, characters 4-4:
Error: Syntax error
f 和 g 在函数外部使用时可以正常工作。
let 绑定需要在 in
之后附加一些表达式,在您的情况下不存在。在这种情况下,您的代码可以将 z
添加为表达式或删除绑定,只留下表达式。
let lp m =
let y = f m in
let z = g y (List.length y) m in
z
或者这个
let lp m =
let y = f m in
g y (List.length y) m