据我所知,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