繁体   English   中英

OCaml函数语法错误

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM