我在下面有这段代码。我对
let in
语法应该如何工作感到有点困惑。我假设 let in
允许您在 in
的范围内使用该变量。虽然,我不明白如何在不进入 in
块的情况下访问表变量。我是否以错误的方式处理了整个代码块?我只是想了解 let in
以及何时到 ;
与 ;;
.
let first_nonrepeating lst =
let store tbl value =
if Hashtbl.mem tbl value then
let seen_count = Hashtbl.find tbl value
in Hashtbl.replace tbl value (seen_count+1)
else
Hashtbl.add tbl value 1 in
let table = Hashtbl.create 100 in
let store_table = store table in
List.iter store_table lst;
let rec findOne lstX =
match lstX with
| [] -> -10000
| h :: t -> if Hashtbl.find table h = 1 then
h
else
findOne t in
findOne lst;;
如果我在 iter 之后再敲一个
in
然后它会抛出一个语法错误。我期待它能工作,因为需要 List.iter 才能使用该表。不知何故,我可以通过使用 ;
在块中的范围之外使用表格。这是如何运作的?上面的代码可以编译,我只是有点迷失了如何使用;
与in
。