编译器在使用命令时返回语法错误
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
程序检查 42 是否在列表中,如果不在,则它按照一组除法、减法等规则再次调用自己。 不知道最后这个信息对调试这段代码是否有帮助。
答案 0 :(得分:2)
这两行:
xyz aux
if ((match4242 aux) = 0) then main (!list) else 1
表示单个表达式,因为它们没有被 ;
分隔。但实际上你不能在这个位置(函数参数)有一个 if
表达式,除非你把它括起来。
很可能您需要在此处的 ;
之后的 aux
。