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ってのを使えばいいのか。