以下 OCaml 片段中的错误是什么?
What is the error in the following OCaml Snippet?
代码:
let ab = let a = 'a' in let b = 'B' in (Char.lowercase b) in a :: [b];;
我正在学习 let
关键字。我希望表达式计算出字符列表 ['a', 'b']
但我一直收到错误
Error: Unbound value a
我不知道为什么会这样。据我所知,我可以继续在 let
中使用 let
来创建新的绑定,并且我在开始时使用 let
将 a
绑定到 'a'
本身,因此它在内部范围内也应该有一个有效值,对吗?
我知道我可以简单地做 b = 'b'
而不是 b = 'B' in (Char.lowercase b)
但我正在试验我能做什么和不能做什么,对我来说这也应该有效。
您的 in
个关键字过多。最上面的 let
不应该有对应的 in
.
let ab =
let a = 'a' in
let b = 'B' in
(Char.lowercase b) in
a :: [b];;
重新写成这样:
let ab =
let a = 'a' in
let b = 'B' in
a :: [Char.lowercase b];;
实际上,由于let b
表达式没有引用a
,所以可以这样写:
let ab =
let a = 'a'
and b = 'B' in
a :: [Char.lowercase b];;
根据评论中的讨论,我也建议,如果你想要一个表达式:
let ab =
let a = 'a' in
let b = 'B' in
a::[Char.lowercase b]
in
(* The rest of your code. *)
问题是你的表情是这样的:
let ab =
let a = 'a' in
let b = 'B' in
Char.lowercase b (* Result: ab gets bound to 'b'. *)
in
a :: [b] (* a and b aren't visible out here! *)
我也建议采用类似这种风格的缩进,以帮助您清楚地看到这些东西。 OCaml 程序员通常在 let 之前换行。如果 let p = e in e'
和 e
或 e'
不在一行中,请缩进 e
,但不要缩进 e'
。这样,您可以快速查看 p
的绑定在哪些进一步的表达式中可见,并查看 e
中进行的任何绑定在 e'
.
中不可见
代码:
let ab = let a = 'a' in let b = 'B' in (Char.lowercase b) in a :: [b];;
我正在学习 let
关键字。我希望表达式计算出字符列表 ['a', 'b']
但我一直收到错误
Error: Unbound value a
我不知道为什么会这样。据我所知,我可以继续在 let
中使用 let
来创建新的绑定,并且我在开始时使用 let
将 a
绑定到 'a'
本身,因此它在内部范围内也应该有一个有效值,对吗?
我知道我可以简单地做 b = 'b'
而不是 b = 'B' in (Char.lowercase b)
但我正在试验我能做什么和不能做什么,对我来说这也应该有效。
您的 in
个关键字过多。最上面的 let
不应该有对应的 in
.
let ab =
let a = 'a' in
let b = 'B' in
(Char.lowercase b) in
a :: [b];;
重新写成这样:
let ab =
let a = 'a' in
let b = 'B' in
a :: [Char.lowercase b];;
实际上,由于let b
表达式没有引用a
,所以可以这样写:
let ab =
let a = 'a'
and b = 'B' in
a :: [Char.lowercase b];;
根据评论中的讨论,我也建议,如果你想要一个表达式:
let ab =
let a = 'a' in
let b = 'B' in
a::[Char.lowercase b]
in
(* The rest of your code. *)
问题是你的表情是这样的:
let ab =
let a = 'a' in
let b = 'B' in
Char.lowercase b (* Result: ab gets bound to 'b'. *)
in
a :: [b] (* a and b aren't visible out here! *)
我也建议采用类似这种风格的缩进,以帮助您清楚地看到这些东西。 OCaml 程序员通常在 let 之前换行。如果 let p = e in e'
和 e
或 e'
不在一行中,请缩进 e
,但不要缩进 e'
。这样,您可以快速查看 p
的绑定在哪些进一步的表达式中可见,并查看 e
中进行的任何绑定在 e'
.