我在书籍和文章中读到的例子中经常看到这一点:
(caddr *something*)
或者 c***r 命令的许多变体。
这对我来说似乎有点荒谬,当您可以更清楚地使用以下命令将事情拉出来时elt:
(elt *something* 2)
但我没有看到这种技术使用得那么多。
是否有我不明白的约定更喜欢 c***r 函数?
等函数caddr可以从嵌套在其他列表中的列表中提取组件。但是elt只对顶级列表进行操作,因此它可以完整地返回一个嵌套列表,但是您还需要嵌套elt命令来提取组件,这caddr就是最终要做的事情,因此它们并不是那么可比。
在某些情况下,您可以互换它们,因为如果您的列表中没有列表,它们可能会返回相同的结果。
小智 5
elt是一个适用于列表和数组的通用函数。当您想编写在两种数据类型上以相同方式工作的通用算法时需要它。但是这样的算法并不多,因为这通常会对列表不利。
一般约定似乎是:
如果您编写一个通用函数来处理列表,您将使用c(a|d)+r函数(这些情况非常罕见,因为大多数情况下都有一个库函数)。这通常发生在 Stackoverflow 问题代码/课堂作业代码等中:)
如果可能first,经验丰富的 Lisp 程序员会使用second等。这在最佳实践中也有几次提到。最佳实践通常还会提到应该创建适当的数据结构而不是处理非平凡的列表。
nth或者elt确实很少见,因为很难为它们想到一个好的用例。我可以想象如何在宏中使用两者,其中性能并不重要,但需要某种通用性,例如,如果有人想以相同的方式处理字符串和字符列表。也许在一些原型代码中,程序员还不确定他们将使用什么数据类型,但仅此而已。
| 归档时间: |
|
| 查看次数: |
1239 次 |
| 最近记录: |