如何修复OCaml中的代码错误?

时间:2014-09-28 14:25:30

标签: ocaml

我是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,我可以看到问题出在哪里,但我几乎无法弄清楚如何解决它。我对这款紧凑型产品感到困惑,让我们感到困惑。"声明,我可以参考这个问题的资源很少。

1 个答案:

答案 0 :(得分:0)

这是一个完全错误的OCaml,实际上它根本不是OCaml))

我只是想猜测你的意图是什么,所以在第二个代码示例中,您尝试将变量绑定到某些字符值,然后小写其中一个并创建这两个值的列表。

在您了解之前,您的代码有什么问题,您需要了解一些有关OCaml语法的知识。

  1. OCaml中有几种绑定语句,第一种是表达式,具有以下模式:

    让«expr-2»中的«变量名»=«expr-1»

  2. 这意味着您将评估«expr-1»的结果绑定到«变量名»,以便您可以在«expr-2»中使用它(并且仅在«expr-2»中使用它,它是它的范围)。 «expr-2»可以是另一个绑定表达式。我们来举一些例子:

    let a = 'a' in [a]
    

    let a = 'a' in
    let b = 'b' in
    [a; b]
    
    1. 第二种绑定是所谓的顶级绑定,当您将某个定义添加到模块级别(或交互式顶级,即相同)时使用。它们看起来有点简单,但它们不是表达式。当我说某些东西不是表达时,我的意思是,大多数情况下,它无法被评估为某个值。所以,他们有以下模式:

      让«变量名»=«expr»

    2. 正如您所看到的,没有部分,只有原始绑定。您可以使用此语句创建全局常量,例如

      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”。