なんだこれは

はてなダイアリーから移転しました。

L-99:P03 どんなminusも平気だよ!

L-99:P03にチャレンジしました。

問題

リストからK番目の要素を持ってきなさい。ただし、リストの最初の要素は1とします。

P03 (*) Find the K'th element of a list.
The first element in the list is number 1.
Example:
* (element-at '(a b c d e) 3)
C

答え

(defun element-at (lst n)
  (if (= n 1)
      (car lst)
      (element-at (cdr lst) (1- n)))
)

こうかな?あ、まずい、0与えたら死ぬじゃん!

CL-USER> (element-at '(1 2 3 4 5) 0)

- Lisp stack overflow. RESET

;; swank:close-connection: NIL

これで少しまし。

(defun safe-element-at (lst n)
  (if (<= n 1)
      (car lst)
      (safe-element-at (cdr lst) (1- n)))
)