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)))

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章