[英]OCaml function syntax error
以下代码给出错误:
let alpha = Hashtbl.create 26 in
let print_and_add a =
print_char a;
Hashtbl.add alpha a true;;
let str = read_line () in
String.iter (fun x -> if Hashtbl.mem alpha x=false then print_and_add x) str
它应该做什么:每次调用该函数(带有char参数)时,它应该打印char,并将其添加到Hash表(alpha)中。 我尝试对函数使用其他语法:
let alpha = Hashtbl.create 26 in
let print_and_add = (fun a ->
print_char a;
Hashtbl.add alpha a true) in
let str = read_line () in
String.iter (fun x -> if Hashtbl.mem alpha x=false then print_and_add x) str
但是我仍然想知道为什么第一个代码失败。 -谢谢你的帮助。
;;
符号专门在全局级别标记表达式的结尾。 因此,其后的所有内容都必须是不同表达形式的一部分。 因此,此后无法定义alpha
。
我从不使用;;
在源代码中,仅当输入顶级时。 我认为这就是目的。
您的代码中还包含let print_and_add ...
没有对应in
。 这仅在全局级别有效(在表达式内部无效)。
如果您更改;;
in
原始代码中,您会得到一些有用的信息。 至少对我有用。
当您尝试在第一个代码段中第二次使用它时, alpha
不再在作用域内。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.