如何在OCaml中编写列表?

时间:2013-07-09 15:55:55

标签: list ocaml

如果我想在OCaml中写list.ml


Q1

哪种方式正确?

type 'a list = 
  | Nil
  | Cons of 'a * ('a list)

type 'a list = 
  | Nil
  | Cons of 'a * 'a list

有什么不同吗?


Q2

另外,如何将类型定义中的Cons定义为::


Q3

如何在类型定义中将Nil定义为[]

1 个答案:

答案 0 :(得分:7)

Q1 - 没有区别;每个都有两个与Cons相关的参数。虽然Cons of ('a * 'a list)是不同的,因为它有一个参数,一个元组。如果您构造一个元组并尝试将其包含在Cons中,您将会将其作为一个重要的区别,如let x = a,Nil in Cons x所示。选择取决于您计划构建元素的方式或数据的某些语义。在这种特殊情况下,不应使用括号。

Q2 - 您不能使用:作为中缀函数名的第一个字符,因为它是该语言中的关键字 - ::也是一个关键字,无论如何。通常,中缀运算符可以使用函数名称周围的括号定义,并且允许special set of symbols

let (!!) a b = Cons( a,b )

第3季度 - 这需要命名标识符[],如let [] = Nil中所示。这些字符在命名约定中是不允许的(请参阅上面的相同链接),因为它们也是单独的关键字。