Function OCaml函数语法错误

Function OCaml函数语法错误,function,functional-programming,ocaml,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参数),它

以下代码给出了一个错误:

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,并将其添加到哈希表(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
在第一个代码段中第二次尝试使用时不再在范围内。

alpha
在第一个代码段中第二次尝试使用时不再在范围内。

alpha
在第一个代码段中第二次尝试使用时不再在范围内代码段。

alpha
在第一个代码段中第二次尝试使用时不再在范围内。

符号在全局级别专门标记表达式的结束。因此,之后的所有内容都必须是另一个表达式的一部分。因此,
alpha
之后无法定义

我从不使用
在源代码中,仅当键入到顶层时。在我看来,这就是它的目的

您的代码还有
let print_和\u add…
,但在
中没有相应的
。这仅在全局级别有效(不在表达式内部)


如果您更改
中的
在原始代码中,您会得到一些有效的东西。至少它对我有用。

代码>符号在全局级别专门标记表达式的结束。因此,之后的所有内容都必须是另一个表达式的一部分。因此,
alpha
之后无法定义

我从不使用
在源代码中,仅当键入到顶层时。在我看来,这就是它的目的

您的代码还有
let print_和\u add…
,但在
中没有相应的
。这仅在全局级别有效(不在表达式内部)


如果您更改
中的在原始代码中,您会得到一些有效的东西。至少它对我有用。

代码>符号在全局级别专门标记表达式的结束。因此,之后的所有内容都必须是另一个表达式的一部分。因此,
alpha
之后无法定义

我从不使用
在源代码中,仅当键入到顶层时。在我看来,这就是它的目的

您的代码还有
let print_和\u add…
,但在
中没有相应的
。这仅在全局级别有效(不在表达式内部)


如果您更改
中的在原始代码中,您会得到一些有效的东西。至少它对我有用。

代码>符号在全局级别专门标记表达式的结束。因此,之后的所有内容都必须是另一个表达式的一部分。因此,
alpha
之后无法定义

我从不使用
在源代码中,仅当键入到顶层时。在我看来,这就是它的目的

您的代码还有
let print_和\u add…
,但在
中没有相应的
。这仅在全局级别有效(不在表达式内部)


如果您更改
中的在原始代码中,您会得到一些有效的东西。至少它对我有用。

谢谢,但为什么它在第二个代码段的范围内?我看不出两者之间有什么大的区别。
让。。。in…
仅在本地绑定定义:因此为“in”。尽管有缩进,但在前一种情况下,您在定义print_和_add之后结束了语句。缩进在语法上是不相关的。谢谢,但为什么它在第二个代码段的范围内?我看不出两者之间有什么大的区别。
let。。。in…
仅在本地绑定定义:因此为“in”。尽管有缩进,但在前一种情况下,您在定义print_和_add之后结束了语句。缩进在语法上是不相关的。谢谢,但为什么它在第二个代码段的范围内?我看不出两者之间有什么大的区别。
let。。。in…
仅在本地绑定定义:因此为“in”。尽管有缩进,但在前一种情况下,您在定义print_和_add之后结束了语句。缩进在语法上是不相关的。谢谢,但为什么它在第二个代码段的范围内?我看不出两者之间有什么大的区别。
let。。。in…
仅在本地绑定定义:因此为“in”。尽管有缩进,但在前一种情况下,在定义print_和_add之后结束语句,缩进在语法上是不相关的。