7.4 nth

函数 nthcdr 重复获取列表的 CDR。函数 nth 获取由 nthcdr 返回的结果的 CAR。它返回列表的第 N 个元素。

因此,如果不是为了速度而在C中定义,nth 的定义将是:

(defun nth (n list)
  "返回列表 LIST 的第 N 个元素。
N 从零开始计数。如果列表没有那么长,则返回 nil。"
  (car (nthcdr n list)))

(最初,nth 是在Emacs Lisp中在subr.el中定义的,但它的定义在1980年代被重写为C语言。)

nth 函数返回列表的单个元素。这可能非常方便。

请注意,元素从零开始编号,而不是从一开始。也就是说,列表的第一个元素,它的 CAR 是零号元素。这种从零开始计数通常会让习惯于列表中第一个元素为编号一的人感到困扰。

例如:

(nth 0 '("one" "two" "three"))
    ⇒ "one"

(nth 1 '("one" "two" "three"))
    ⇒ "two"

值得一提的是,nthnthcdrcdr 都不会改变原始列表—这些函数是非破坏性的。这与 setcarsetcdr 函数形成鲜明对比。