simply scheme 第八章 练习

8.1

(a e i o u)

()

0

#f

(16 144 0)

(aioee)

25

(go d sunshi)

8.2

(keep vowel? 'birthday)

(every first '(golden slumbers))

(first '(golden slumbers))

(every last '(little child))

> (accumulate word (every last '(little child)))

(every + '(2 3 4 5))

(accumulate + '(2 3 4 5))

8.4

(define (choose-beatles f)

  (keep f '(john paul george ringo)))

8.5

(define (transform-beatles f)

  (every f '(john paul george ringo)))

8.6

(define (words wd)

  (every convert wd))

(define (convert x)

  (cond((equal? x 'a) 'about)

       ((equal? x 'b) 'bring)

       ((equal? x 'c) 'cab)

       ((equal? x 'd) 'digit)

       ((equal? x 'e) 'erection)

       ((equal? x 'f) 'fail)

       ((equal? x 'g) 'gtalk)

       ((equal? x 'h) 'hello)

       ((equal? x 'i) 'intern)

       ((equal? x 'j) 'jack)

       ((equal? x 'k) 'knight)

       ((equal? x 'l) 'little)

       ((equal? x 'm) 'mom)

       ((equal? x 'n) 'nation)

       ((equal? x 'o) 'open)

       ((equal? x 'p) 'pantyhose)

       ((equal? x 'q) 'quit)

       ((equal? x 'r) 'right)

       ((equal? x 's) 'strong)

       ((equal? x 't) 'tight)

       ((equal? x 'u) 'up)

       ((equal? x 'v) 'villa)

       ((equal? x 'w) 'we)

       ((equal? x 'x) 'x)

       ((equal? x 'y) 'yes)

       ((equal? x 'z) 'zip)))

8.7
(define (letter-count sent)
  (accumulate +(every always-one (every first (accumulate word sent)))))
(define (always-one arg)
  1)
8.10
(define (true-for-all? f arg)
  (equal? (count (keep f arg)) (count arg)))
8.11
(define (grade-modifier wd)
  (cond((equal? (last wd) '+) .33)
       ((equal? (last wd) '-) -.33)
       (else 0)))
(define (base-grade wd)
  (cond((equal? (first wd) 'A) 4)
       ((equal? (first wd) 'B) 3)
       ((equal? (first wd) 'C) 2)
       ((equal? (first wd) 'D) 1)
       ((equal? (first wd) 'F) 0)))
(define (grade wd)
  (+ (base-grade wd) (grade-modifier wd)))
(define (gpa sent)
  (/ (accumulate +(every grade sent))(count sent)))
8.12
(define (count-ums sent)
  (count (keep um? sent)))
(define (um? wd)
  (equal? wd 'um))

8.13

(define (phone-unspell wd)

  (accumulate word(every con wd)))

(define (con wd)

  (cond ((member? wd 'abc) 2)

        ((member? wd 'def) 3)

        ((member? wd 'ghi) 4)

        ((member? wd 'jkl) 5)

        ((member? wd 'mno) 6)

        ((member? wd 'pqrs) 7)

        ((member? wd 'tuv) 8)

        ((member? wd 'wxyz) 9)))

8.14

(define (subword wd s e)

  ((repeated bl(-(count wd) e))((repeated bf(- s 1))wd)))

posted on 2010-07-06 14:05  草头菜  阅读(140)  评论(0编辑  收藏  举报

导航