【Scheme】mapの定義
mapを定義してみた。
;;; リストの最初の要素を集めてリストにする (define (first-elems lss) (let loop ((ls0 lss) (ls1 '())) (if (null? ls0) (reverse ls1) (loop (cdr ls0) (if (null? (car ls0)) ls1 (cons (car (car ls0)) ls1)))))) ;;; リストのcdrを集めてリストにする (define (cdrs lss) (let loop ((ls0 lss) (ls1 '())) (if (null? ls0) (reverse ls1) (loop (cdr ls0) (if (null? (car ls0)) ls1 (cons (cdr (car ls0)) ls1)))))) ;;; my-mapの定義 (define (my-map func . lss) (let loop ((ls0 lss) (ls1 '())) (cond ((null? ls0) (reverse ls1)) ((null? (car ls0)) (reverse ls1)) (else (loop (cdrs ls0) (cons (apply func (first-elems ls0)) ls1))))))