據我所知,Haskell中的列表類型是使用鏈表在內部實現的。但是,該語言的用戶沒有看到實現的細節,也沒有能力修改組成鏈接列表的「鏈接」以允許它指向不同的內存地址。我想這是在內部完成的。Haskell中的列表:數據類型還是抽象數據類型?
那麼,那麼列表類型是否可以像Haskell一樣被限定呢?它是「數據類型」還是「抽象數據類型」?什麼是實現的鏈表類型?
此外,由於Prelude提供的列表類型不是鏈表類型,因此如何實現基本鏈表功能?
舉個例子來說,這個代碼段設計成一個列表的索引n在添加的元素的:
add [] acc _ _ = reverse acc
add (x:xs) acc 0 a = add xs (x:a:acc) (-1) a
add (x:xs) acc n a = add xs (x:acc) (n-1) a
使用「真正的」鏈接列表,添加元素也只是由修改的一個指向內存地址的指針。這在Haskell中是不可能的(或者是?),因此問題是:我的實現是向最好的列表添加一個元素,還是缺少一些東西(我認爲使用reverse
函數尤其如此醜,但它可能沒有?)
請不要猶豫,糾正我,如果我說的是錯誤的,並感謝您的時間。
歡迎來到StackOverflow!偉大的第一個問題 – Sampson 2009-12-21 19:53:00
http://en.wikibooks.org/wiki/Haskell/List_processing – 2009-12-21 19:57:13
感謝所有回答我的問題的人,儘管我只能將其中的一個標記爲我的「接受的答案」,但您都非常有幫助。 – CharlieP 2009-12-22 10:52:17