将项目附加到 Ocaml 中的列表时出现语法错误
Syntax Error when Appending item to List in Ocaml
这是我的完整代码:
let xyz m l =
let r1 l m = if ((m mod 2) = 0) then l:=1::!l; !l else !l in r1 l m
let l = ref []
let y = xyz 250 l
let () = List.iter (fun x -> print_int x) y
它返回以下错误:
ocamlopt loops.ml -o l
File "loops.ml", line 21, characters 54-58:
21 | let r1 l m = if ((m mod 2) = 0) then l:=1::!l; !l else !l in r1 l m
^^^^
Error: Syntax error
此代码:
l := 1 :: !l; !l
是由;
分隔的两个表达式。但是,then
之后只能出现一个表达式。由于您有两个表达式,因此当 else
出现时,语法上不再允许它。
另一种看待它的方式是 if-then
和 else
的优先级高于 ;
。
您可以通过括号将两个表达式合二为一:
if ... then ( l := 1 :: !l; !l ) else ...
您的代码中可能存在其他问题,但这是您出现语法错误的原因。
您实际上不需要使用引用,因为您正在为新列表创建新的绑定。对于像 OCaml 这样的函数式编程语言,无论如何最好避免使用它们。
let xyz m l =
let r1 l m = if ((m mod 2) = 0) then 1 :: l else l in
r1 l m
let l = []
let y = xyz 250 l
let () = List.iter (fun x -> print_int x) y
您的代码现在看起来更简单,您甚至不需要额外的内部闭包和匿名函数:
let xyz m l =
if ((m mod 2) = 0) then 1 :: l else l
let l = []
let y = xyz 250 l
let () = List.iter print_int y
这是我的完整代码:
let xyz m l =
let r1 l m = if ((m mod 2) = 0) then l:=1::!l; !l else !l in r1 l m
let l = ref []
let y = xyz 250 l
let () = List.iter (fun x -> print_int x) y
它返回以下错误:
ocamlopt loops.ml -o l
File "loops.ml", line 21, characters 54-58:
21 | let r1 l m = if ((m mod 2) = 0) then l:=1::!l; !l else !l in r1 l m
^^^^
Error: Syntax error
此代码:
l := 1 :: !l; !l
是由;
分隔的两个表达式。但是,then
之后只能出现一个表达式。由于您有两个表达式,因此当 else
出现时,语法上不再允许它。
另一种看待它的方式是 if-then
和 else
的优先级高于 ;
。
您可以通过括号将两个表达式合二为一:
if ... then ( l := 1 :: !l; !l ) else ...
您的代码中可能存在其他问题,但这是您出现语法错误的原因。
您实际上不需要使用引用,因为您正在为新列表创建新的绑定。对于像 OCaml 这样的函数式编程语言,无论如何最好避免使用它们。
let xyz m l =
let r1 l m = if ((m mod 2) = 0) then 1 :: l else l in
r1 l m
let l = []
let y = xyz 250 l
let () = List.iter (fun x -> print_int x) y
您的代码现在看起来更简单,您甚至不需要额外的内部闭包和匿名函数:
let xyz m l =
if ((m mod 2) = 0) then 1 :: l else l
let l = []
let y = xyz 250 l
let () = List.iter print_int y