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之后结束语句,缩进在语法上是不相关的。