課題10-3

まだ初心者にもなっていないのにうpするつもり.というのも,上のページの課題10-3なんですが,とりあえずやってみたところ,

(defun number-elements (x)
  (cond ((atom x) nil)
    ((numberp (first x)) (cons (first x) (number-elements (rest x))))
    (t (number-elements (rest x)))))

ってな感じに.これはこれで上手く動いているんですけど,下のようなプログラムだと,

(defun number-elements (x)
  (if (atom x) nil
    (cons (if (numberp (first x)) (first x) nil) (number-elements (rest x)))))

数字以外のとこにnilが要素として入っちゃいます.第一引数が何だろうとリストの先頭にぶっこむのはconsの仕様なんだろうけど(曖昧),何かきれいに書く方法はないだろうかと.lisperの人がいたら教えていただきたい.ちょっと早めのクリスマスプレゼントをくらはい.