nth

実はこういう問題は仕様をどこまで詰められるか、という試験として使えるかもしれない、と思った。
例えば、単に(zero-origin で)リスト l の n 番目の要素を返す関数と、言われても以下の場合の挙動が曖昧だ。

  • n < 0 の場合
  • n >= length(l) の場合

もしくは、l がリストじゃない場合も考えないといけないかもしれない。
ちなみに Emacs Lisp の nth は

  • n < 0 の場合 (car l) を返す
  • n >= length(l) の場合 nil を返す

で、Common Lisp の nth は

  • n < 0 の場合エラー
  • n >= length(l) の場合 nil を返す

と挙動が違うようだ。
さて、以下、Common LispScheme での自分の回答例。上記のどちらの定義とも異なる。

(defun my-nth (n l)
  (if (consp l)
      (cond
       ((< n 0) nil)
       ((zerop n) (car l))
       (t (my-nth (1- n) (cdr l))))
    nil))
(define (my-nth n l)
  (if (pair? l)
      (cond
       ((zero? n) (car l))
       ((negative? n) ())
       (#t (my-nth (- n 1) (cdr l))))
      ()))

しかし、Scheme て関数名が Common Lisp と結構違ってて戸惑うなぁ。