【问题标题】:Don't understand symbols in OCaml不理解 OCaml 中的符号
【发布时间】:2020-12-17 03:56:47
【问题描述】:

这些天我正在通过一些基本材料和一个用 OCaml 编写的项目来学习 OCaml。但我不明白 OCaml 中的一些符号。例如:

open Batteries

type char_token = [ 
      | `Char of int
      | `Escape of char list
      ]

这些带有符号`的东西是什么意思?
我也很难理解其他符号:

  • |>
  • _

我在OCaml Manual 中找不到任何内容。有人可以解释有关上述符号的更多详细信息吗?或者只是向我推荐一些材料?

【问题讨论】:

    标签: ocaml ocamlbuild ocaml-batteries


    【解决方案1】:

    `Foo[> 是多态变体 (http://caml.inria.fr/pub/docs/manual-ocaml-4.00/manual006.html#toc36)。对于初学者来说,它们可能不值得,但您可以查看我的一个旧答案 (Extending an existing type in OCaml) 以了解如何使用它们。

    _ 是一个匹配任何东西的模式:

    let head l = match l with
    | x :: _ -> x
    | _ -> failwith "empty list"
    

    _ 都用来对编译器说“我不关心的事情”。

    【讨论】:

    • 波浪号不是独立的运算符; ~-~-. 分别定义了整数和浮点数的一元否定。这些都列在Pervasives 模块文档中。
    • ~还有另一个用途。在 OCaml 中,您可以定义标记(即命名)参数的函数,如:let f ~x ~y = x - y。现在,您可以根据名称而不是位置将参数传递给 flet x = 2 in let y = 1 in f ~y ~x 将返回 1 而不是 -1
    【解决方案2】:

    以`开头的标识符是polymorphic variants。粗略地说,它们是结构类型的变体。

    |> 是一个中缀运算符:你可能会想到Batteries 中定义的那个,它是函数应用程序(x |> f 意思是f x)。

    _ 是匹配模式中的一个特殊符号,意思是“匹配任何东西而不进行绑定”。

    【讨论】:

    • |> 实际上是在 4.01 中添加到标准库中的。
    猜你喜欢
    • 1970-01-01
    • 2015-02-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-02-24
    相关资源
    最近更新 更多