2013-07-09 37 views
2

如果我想要写在OCaml中list.ml如何在OCaml中编写列表?


Q1

哪条路是正确的?

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

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

什么不同吗?


Q2

而且,我怎么定义的类型定义为::Cons


Q3

如何定义Nil类型定义为[]里面?

回答

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) 

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