schemeで全dataを+するのを知りたいです、か?

http://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q1347295398

とりあえず仕様を満たすものをガガッと力任せに書いてみた。

(define (mysum lst)
  (define (iter lst)
    (if (null? lst) 0
        (let ((head (car lst))
              (tail (cdr lst)))
          (+ (iter tail)
             (if (number? head) head
                 (iter head))))))
  (if (list? lst) (iter lst)
      (error)))

(define (mytrans lst)
  (define (iter lst)
    (if (null? lst) '()
        (let ((head (car lst))
              (tail (cdr lst)))
          (if (number? head)
              (cons (alpha head) (iter tail))
              (cons (iter head) (iter tail))))))
  (define (alpha n)
    (cond ((= n 1) 'one)
          ((= n 2) 'two)
          ((= n 3) 'three)
          ((= n 4) 'four)
          ((= n 5) 'five)
          ((= n 6) 'six)
          ((= n 7) 'seven)
          ((= n 8) 'eight)
          ((= n 9) 'nine)))
  (cond ((number? lst)(error))
        ((null? lst) 0)
        (else (iter lst))))

(define (myfind lst n)
  (let ((result (assoc n lst)))
    (if result (cadr result)
        #f)))


【追記】
もっとかっちょいいのを書いてくれてる
http://d.hatena.ne.jp/trotr/20100921/1285082372


valvallowさんの抽象化バージョン
http://valvallow.blogspot.com/2010/09/re-schemedata.html