nth ¶nthcdr 関数は、リストの CDR
を繰り返し取得します。nth 関数は、nthcdr が返す結果の CAR
を取得します。そして、リストの N 番目の要素を返します。
したがって、速度向上のためにC言語で定義されていない場合、nthの定義は次のようになります。
(defun nth (n list) "Returns the Nth element of LIST. N counts from zero. If LIST is not that long, nil is returned." (car (nthcdr n list)))
(もともと nth は Emacs Lisp では subr.el で定義されていたが、1980年代に C 言語で定義が書き直された。)
nth 関数は、リストの単一の要素を返します。これは非常に便利です。
なお、要素の番号は1ではなく0から始まる点に注意してください。つまり、リストの最初の要素であるCARが0番目の要素となります。このような0始まりの数え方は、リストの最初の要素が1番であることに慣れている人々(1始まりに慣れている人々)にとって、しばしば違和感の原因となります。
例えば:
(nth 0 '("one" "two" "three"))
⇒ "one"
(nth 1 '("one" "two" "three"))
⇒ "two"
なお、nthはnthcdrやcdrと同様に元のリストを変更しません。つまり、この関数は非破壊的です。これは、setcarやsetcdrの関数とは対照的です。