在 Ocaml 中调用函数内部函数时出现语法错误

Syntax error when Calling function inside function in Ocaml

我在调用函数fg时出现语法错误lp 并将它们分配给 yz

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

fg 在函数外部使用时可以正常工作。

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