我是OCaml的新手,刚刚找到了一个在线OCaml指南,http://try.ocamlpro.com/。 当谈到第5课时,我陷入了一些练习中。所以,这是问题所在: 修复所有这些let表达式,以便在结尾处获得预期结果:
1
let xy =
let x = 'x' and let y = 'y' in x ::[y]
2
let ab =
let a = 'a'
let b = 'B' in Char.lowercase b
in a ::[b]
3
let up = Char.uppercase in
big_xy = List.map up xy ;
big_ab = List.map up ab ;
big_ab @ big_xy
PS:我知道如何解决问题1,我在这里发布它是为了解决问题3.对于问题2和3,我可以看到问题出在哪里,但我几乎无法弄清楚如何解决它。我对这款紧凑型产品感到困惑,让我们感到困惑。"声明,我可以参考这个问题的资源很少。
答案 0 :(得分:0)
这是一个完全错误的OCaml,实际上它根本不是OCaml))
我只是想猜测你的意图是什么,所以在第二个代码示例中,您尝试将变量绑定到某些字符值,然后小写其中一个并创建这两个值的列表。
在您了解之前,您的代码有什么问题,您需要了解一些有关OCaml语法的知识。
OCaml中有几种绑定语句,第一种是表达式,具有以下模式:
让«expr-2»中的«变量名»=«expr-1»
这意味着您将评估«expr-1»的结果绑定到«变量名»,以便您可以在«expr-2»中使用它(并且仅在«expr-2»中使用它,它是它的范围)。 «expr-2»可以是另一个绑定表达式。我们来举一些例子:
let a = 'a' in [a]
或
let a = 'a' in
let b = 'b' in
[a; b]
第二种绑定是所谓的顶级绑定,当您将某个定义添加到模块级别(或交互式顶级,即相同)时使用。它们看起来有点简单,但它们不是表达式。当我说某些东西不是表达时,我的意思是,大多数情况下,它无法被评估为某个值。所以,他们有以下模式:
让«变量名»=«expr»
正如您所看到的,没有部分,只有原始绑定。您可以使用此语句创建全局常量,例如
let pi = 4. *. atan 1.
或者,您可以使用它将函数绑定到名称(换句话说,写入函数定义):
let circle_area radius = pi * radius ** 2.
当然,在函数内部,您可以使用任何表达式,包括绑定表达式:
let area_of_circles radii =
let areas = List.map circle_area radii in
List.fold_left (+.) 0. areas
我想指出,有很多很好的教程和教科书,可以帮助你快速学习OCaml。您可以在OCaml标签页面找到它们。我个人建议你从一开始就看“OCaml”。