什么是不正确的名单?

day*_*day 5 lisp scheme s-expression

这是我上一个问题的后续行动:为什么我们需要零?显然,大多数时候都会使用正确的列表.但不正确的清单的目的是什么?

Joh*_*nts 6

好问题!(好吧,我喜欢克里斯'重写它,无论如何......).根据我的经验,不正确列表的最常见用法是轻量级双元素结构.

推理是这样的:"哎呀,我需要一个双元素结构.哦,等等,为什么不只是使用'cons'?它是内置的,内置的引用语法非常好地支持它.哎呀,我会做的."

特别是,诸如"assoc"之类的内置操作通常以假定给出一个不正确的双元素列表列表的方式实现.


Lui*_*las 6

没有充分的理由。不正确的列表真正有好处的唯一一件事就是作为关联列表的语法的一部分,即使在那里,自定义键-值对的语法也会更好。记录类型可以更好地实现您可以想到的用于不正确列表的任何使用,毕竟,记录类型是包含列表的:您可以根据记录定义Lisp列表,但不能相反(因为列表不允许您定义类型与该语言中所有其他类型都不相交的数据结构)。

我喜欢将对和列表表示为所有类型的数据的滥用称为Lisp程序员病,这是许多Lisp拥护者提倡的一种真正的耻辱。我不得不清理这种东西太多次了。

  • sacundim,感谢您的清理。我对这个列表与记录感到困惑已经有一段时间了。我想了解更多相关内容。但谷歌搜索不会返回任何有用的结果。既然你说你已经清理过很多次了,我想多看看它是否存在于某个地方。谢谢。 (2认同)