在Ocaml中的递归函数内调用递归函数时出现语法错误

在Ocaml中的递归函数内调用递归函数时出现语法错误,ocaml,Ocaml,在中使用命令时,编译器返回语法错误 xyz aux if((match4242 aux) = 0) then main (!list) else 1 这是我的全部代码 open Printf open Format let regraUm m = m/2 let regraDois m = ((m / 10) mod 10) * (m mod 10) let regraTres m = 42 let match4242 list = let a = ref 0 i

在中使用命令时,编译器返回语法错误

xyz aux
    if((match4242 aux) = 0) then main (!list) else 1
这是我的全部代码

open Printf
open Format

let regraUm m = m/2
  
let regraDois m = ((m / 10) mod 10) * (m mod 10)

let regraTres m = 42


let match4242 list =
    let a = ref 0 in
    let rec match42 list = 
    match list with
    |[]->[]
    |m::body->
    begin
    if (m = 42) then a := 1;
    match42 body
    end
    in match42 list;
    !a

let rec main aux = 
    let list = ref [] in
    let rec xyz aux = 
        let () = List.iter (fun x -> printf "%d " x) aux in
        match aux with
        |[]->[]
        |m::body -> 
        begin
        if ((m mod 2) = 0) then list := (m - (regraUm m))::!list;
        if ((m mod 3) = 0) || ((m mod 4) = 0) then 
            if (regraDois m <> 0) then
                list := (m - (regraDois m)) ::!list;
        if ((m mod 5) = 0) then list := (m - (regraTres m))::!list;
        xyz body
        end
    in xyz aux
    if((match4242 aux) = 0) then main (!list) else 1
openprintf
开放格式
让再研磨m=m/2
设m=((m/10)模10)*(m模10)
设重数m=42
让我列出4242=
设a=ref 0 in
让记录匹配42列表=
匹配列表
|[]->[]
|m::body->
开始
如果(m=42),则a:=1;
匹配体
终止
在匹配列表中;
!A.
让rec main aux=
让list=ref[]在
设rec xyz aux=
让()=List.iter(fun x->printf“%d”x)辅助输入
配合
|[]->[]
|m::body->
开始
如果((m mod 2)=0),则列表:=(m-(regraUm)):!列表
如果((m mod 3)=0)| |((m mod 4)=0),则
如果(REGRADOM0),则
列表:=(m-(regraDois m)):!列表
如果((m mod 5)=0),则列表:=(m-(重新标记m)):!列表
xyz体
终止
在xyz辅助
如果((match4242 aux)=0),则主(!list)else 1
程序检查42是否在列表中,如果不在列表中,则按照一组除法、减法等规则再次调用自己。 我不知道最后的信息是否有助于调试这段代码。

这两行:

   xyz aux
if ((match4242 aux) = 0) then main (!list) else 1
表示一个表达式,因为它们不被
分隔。但事实上,除非将表达式括起来,否则在此位置(函数参数)不能有
if
表达式

很可能您想要
aux
之后