simply scheme 第十二章 練習

<!-- @page { margin: 2cm } PRE.western { font-family: "DejaVu Sans Mono", monospace } PRE.cjk { font-family: "AR PL UKai CN", monospace } PRE.ctl { font-family: "DejaVu Sans Mono", monospace } P { margin-bottom: 0.21cm } -->

12.1

(define (addup nums)

  (if (empty? nums)

      0

      (+ (first nums)(addup (bf nums)))))

12.2

(define (acronym sent)

  (if(=(count sent) 1)

     (first(first sent))

     (word(first(first sent))

          (acronym(bf sent)))))

12.3

no if do that n!==0

12.4

(define (f sent)

  (if(empty? sent)

     '()

     (se (f (bf sent))(first sent))))

reverse the sentence

12.5

(define (exaggerate sent)

  (if(empty? sent)

     '()

     (se ((lambda(wd)(if(number? wd)(* 2 wd) wd))(first sent))

         (e(bf sent)))))

12.6

(define (gpa sent)

  (/ (gpa-c sent) (count sent)))

(define (gpa-c sent)

  (if(empty? sent)

     0

     (+ (gpa-m (first sent))

        (gpa-p (first sent))

        (gpa-c (bf sent)))))


(define (gpa-m 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 (gpa-p wd)

  (cond((equal? (last wd) '+)0.33)

       ((equal? (last wd) '-)-0.33)

       (else 0)))

12.7

(define (spell-number num)

  (if(empty? num)

     '()

     (se (spell-digit(first num))(spell-number (bf num)))))

(define (spell-digit digit)

  (item (+ 1 digit)

        '(zero one two three four five six seven eight nine ten)))

12.8

(define (numbers sent)

  (if(empty? sent)

     '()

     (se ((lambda(x)(if(number? x)x '()))(first sent))

          (numbers (bf sent)))))

12.9

(define (real wd)

  (not (member? wd '(a the an in of and for to with))))

(define (real-word sent)

  (if(empty? sent)

     '()

     (se ((lambda(wd)(if(real wd)wd '()))(first sent))

          (real-word (bf sent)))))

12.10

(define (remove wd sent)

  (if(empty? sent)

     '()

     (se ((lambda(w)(if(equal? w wd)'() w))(first sent))

         (remove wd (bf sent)))))

12.11

(define (count x)

  (if(empty? x)

     0

     (+ 1 (count (bf x)))))

12.12

(define (roman-value letter)

  (cond((equal? letter 'i)1)

       ((equal? letter 'v)5)

       ((equal? letter 'x)10)

       ((equal? letter 'l)50)

       ((equal? letter 'c)100)

       ((equal? letter 'd)500)

       ((equal? letter 'm)1000)))

(define (a wd)

  (if(=(count wd)1)

     (roman-value wd)

     (+ ((lambda(w)

           (if(< (roman-value (first w))

                 (roman-value (first(bf w))))

              (- (roman-value (first w)))

              (roman-value(first w))))

         wd)

        (a (bf wd)))))

12.13

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