有没有更好的方法来获取列表中的第n项?

Jas*_*ett 2 lisp common-lisp

以下两个表达式是等效的:

(third (list 1 2 3 4))

(first (nthcdr 2 (list 1 2 3 4)))
Run Code Online (Sandbox Code Playgroud)

然而,使用"第三","第四","第五"等并不总是实用的,(first (nthcdr n list))似乎有点冗长.有没有办法说出(item 2 (list 1 2 3 4))如何在列表中获取第n项?

T33*_*33C 14

(nth 3 (list 1 2 3 4))
Run Code Online (Sandbox Code Playgroud)

返回第4项(基于零!)

根据HyperSpec:

Accessor NTH

描述:

第n所处的ñ个元素列表,其中汽车的的名单是"零"的元素.特别,

(nth n list) ==  (car (nthcdr n list))
Run Code Online (Sandbox Code Playgroud)

例子:

(nth 0 '(foo bar baz)) =>  FOO
(nth 1 '(foo bar baz)) =>  BAR
(nth 3 '(foo bar baz)) =>  NIL
(setq 0-to-3 (list 0 1 2 3)) =>  (0 1 2 3)
(setf (nth 2 0-to-3) "two") =>  "two"
0-to-3 =>  (0 1 "two" 3)
Run Code Online (Sandbox Code Playgroud)


Rai*_*wig 13

NTH适用于列表.

ELT适用于序列.序列是列表和各种一维数组(矢量,字符串......).

这意味着ELT是更通用的访问器,它不仅适用于列表,还适用于一维数组.