2013-07-09 67 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。這些字符在命名約定中是不允許的(參見上面的相同鏈接),因爲它們也是單獨的關鍵字。