- 108 名前:デフォルトの名無しさん mailto:sage [2008/12/03(水) 17:02:51 ]
- ;; >>106 エスパーして作ってみた
(mapc 'require (cl el-expectations)) (defun co (x lst &optional acc) (assert (listp lst)) (macrolet ((recur (&rest lst) `(co ,@lst))) (let ((cur (car lst))) (cond ((null cur) nil) ((and (atom cur)) (if (eq x cur) (cons 'car acc) (recur x (cdr lst) (cons 'cdr acc)))) ((listp cur) (or (recur x (car lst) (cons 'car acc)) (recur x (cdr lst) (cons 'cdr acc)))) (t (error "unexpected lst: %s" cur)))))) ;; test cases (expectations (error (co 'a '())) (expect (co 'not-found '())) (expect (co 'a '(a)) '(car)) (expect (co 'b '(a b c)) '(car cdr)) (expect (co 'c '(a b c)) '(car cdr cdr)) (expect (co 'x '((x) a b c)) '(car car)) (expect (co 'x '((a b c x) d e f)) '(car cdr cdr cdr car)) (expect (co 'x '(a b (c x d) e f)) '(car cdr car cdr cdr)))
|

|