1. 程式人生 > >【SICP練習】149 練習4.5

【SICP練習】149 練習4.5

strong test 4.5 code ide action ava -s iter

練習4-5

原文

Exercise 4.5. Scheme allows an additional syntax for cond clauses, ( => ). If evaluates to a true value, then is evaluated. Its value must be a procedure of one argument; this procedure is then invoked on the value of the , and the result is returned as the value of the cond expression. For example

(cond ((assoc ‘b ‘((a 1) (b 2))) => cadr)     
      (else false))

returns 2. Modify the handling of cond so that it supports this extended syntax.

分析

代碼

 (define (extended-cond-syntax? clause) (eq? (cadr clause) ‘=>)) 
 (define (extended-cond-test clause) (car clause)) 
 (define (extended-cond-recipient
clause)
(caddr clause))
(define (cond->if expr) (expand-clauses (cond-clauses expr))) (define (expand-clauses clauses) (if (null? clauses)false (let ((first (car clauses)) (rest (cdr clauses))) (cond
((cond-else-clause? first) (if (null?

rest) (sequence->exp (cond-actions first)) (error "ELSE clause isn‘t last -- COND->IF" clauses))) ((extended-cond-syntax? first) (make-if (extended-cond-test first) (list (extended-cond-recipient first) (extended-cond-test first)) (expand-clauses rest))) (else (make-if (cond-predicate first) (sequence->exp (cond-actions first)) (expand-clauses rest)))))))



感謝您的訪問,希望對您有所幫助。

歡迎大家關註或收藏、評論或點贊。


為使本文得到斧正和提問。轉載請註明出處:
http://blog.csdn.net/nomasp


【SICP練習】149 練習4.5