filter

OnLispの4章3節に載ってる filterを自分で書いてみる。30分くらいかかった。だめぽ。

> (filter #'(lambda (x) (if (numberp x) (1+ x)))
          '(a 1 2 b 3 c d 4))
(2 3 4 5)

オレ版

とりあえず書いてみたものの、なんだかヘンだなぁ。

(defun filter (fn lst)
 (let (s)
   (labels *1
                  (progn
                    (let *2
   (reverse s)))

ポール版

(defun filter (fn lst)
  (let ( (acc nil) )
    (dolist (x lst)
      (let ((val (funcall fn x)))
	(if val (push val acc))))
    (nreverse acc)))

なるほど、dolistってのを使えばいいのか。

*1:flt (l) (if (not (null l

*2:val (funcall fn (car l)))) (if val (push val s))) (flt (cdr l)))))) (flt lst