列表作为通用数据类型表示有什么缺点?
Lisp 程序员倾向于使用列表来表示所有其他数据类型。
但是,我听说列表并不是数据类型的良好通用表示。
与使用记录相比,以这种方式使用列表有什么缺点?
Lisp programmers tend to use lists to represent all other data types.
However, I have heard that lists are not a good universal representation for data types.
What are the disadvantage of lists being used in this manner, in contrast to using records?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

发布评论
评论(3)
您正在谈论 Peter Seibel 在 Practical Common Lisp 第 11 章中提到的内容:
[开始] Lisp 集合的讨论
与列表。 。 。常常导致读者误入歧途
结论是列表是 Lisp 唯一的集合类型。为了搞事情
更糟糕的是,因为 Lisp 的列表是一种非常灵活的数据结构,所以
可以将它们用于数组和哈希表的许多用途
用于其他语言中。但过于关注是错误的
列表;虽然它们是表示 Lisp 的关键数据结构
代码就像 Lisp 数据一样,在很多情况下其他数据结构更重要
合适。一旦您熟悉了 Common Lisp 提供的所有数据类型,
您还将看到列表对于数据原型设计很有用
稍后将被更有效的结构所取代
一旦明确了数据的具体使用方式。
我认为的一些原因是:
- 例如,大型哈希表比等效的 alist 具有更快的访问速度
- 单一数据类型的向量更紧凑,并且访问速度更快
- 向量可以通过索引更有效且更轻松地访问
- 对象和结构允许您按名称而不是位置访问数据
归根结底是为手头的任务使用正确的数据类型。当它不明显时,你有两个选择:猜测并稍后修复,或者现在弄清楚;有时,这两种方法都是正确的方法。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
你提到“记录”。我认为您指的是固定元素结构/对象/复合数据。例如,在 HtDP 语法中:
...并且您询问将数据包表示为长度为 3 的列表的优缺点,
而不是作为一段复合数据(或“记录”)。
在适合复合数据的情况下(这些值具有特定的角色和名称,并且它们的数量是固定的),复合数据通常是更可取的;它们帮助您捕获程序中的错误,这是编程的必要条件。
You mention "record". By this I take it that you're referring to fixed-element structs/objects/compound data. For instance, in HtDP syntax:
... and you're asking about the pros and cons of representing a packet as a list of length three,
rather than as a piece of compound data (or "record").
In instances where compound data is appropriate--the values have specific roles and names, and there are a fixed number of them--compound data is generally preferable; they help you to catch errors in your programs, which is the sine qua non of programming.