pick、rempick 実装
pick
(define pick (lambda (n lat) (cond ((null? lat) '()) ((= 1 n) (car lat)) (else (pick (- n 1) (cdr lat)))))) (pick 4 '(aa bb cc ddd ee ff)) ;ddd
答えと比べてみると
最終条件が zero? だなぁ。
あー 掟があったね。
掟を守って書き直し。
pick (掟を守る)
(define pick (lambda (n lat) (cond ((null? lat) '()) ((zero? (sub1 n)) (car lat)) (else (pick (sub1 n) (cdr lat)))))) (pick 4 '(aa bb cc ddd ee ff)) ;ddd
なるほどねぇ。
つぎは 掟を守って rempick。
rempick
(define rempick (lambda (n lat) (cond ((null? lat) '()) ((zero? (sub1 n)) (rempick (sub1 n) (cdr lat))) (else (cons (car lat) (rempick (sub1 n) (cdr lat))))))) (rempick 3 '(a b c d e)) ;(a b d e)
問題なし。
moremagic
2013-06-18