OCaml函数语法错误

时间:2015-07-01 17:50:03

标签: function functional-programming ocaml

以下代码给出错误:

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

但我仍然想知道为什么第一个代码失败了。 - 谢谢你的帮助。

2 个答案:

答案 0 :(得分:2)

;;符号专门标记表达式在全局级别的结束。因此,它之后的一切都必须成为不同表达的一部分。因此,alpha之后无法定义。

我从不在源代码中使用;;,只有在输入到顶层时才使用let print_and_add ...。在我看来,这就是它的用途。

您的代码也有in,没有相应的;;。这仅在全局级别(不在表达式内)有效。

如果您在原始代码中将in更改为onNext,则可以获得有效的内容。至少它对我有用。

答案 1 :(得分:1)

当您尝试在第一个代码段中第二次使用

alpha时,

[]+[]已不在范围内。