在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
之后