SICP Exercise 4.5

1776 단어
SICP Exercise 4.5
(define (expand-clauses clauses)
  (if (null? clauses)
      'false
      (let ((first (car clauses))
            (rest (cdr clauses)))
        (if (cond-else-clause? first)
            (if (null? rest)
                (sequence->exp (cond-actions first))
                (error "ELSE clause isn't last -- COND->IF"
                       clauses))
            (if (cond-=>-clause? first)
                (make-if (cond-predicate first)
                         (list (sequence->exp (cond-=>-actions first))
                               (cond-predicate first))
                         (expand-clauses rest))
                (make-if (cond-predicate first)
                         (sequence->exp (cond-actions first))
                         (expand-clauses rest)))))))
(define (cond-=>-clause? clause)
  (eq? (cadr clause) '=>))
(define (cond-=>-actions clause)
  (cddr clause))
운영 결과는 다음과 같습니다.
;;; M-Eval input:
(cond ((assoc 'b '((a 1) (b 2))) => cadr) (else false))

;;; M-Eval value:
2
실행 프롬프트:
1, runnu에서eval 파일에 다음 파일이 로드됩니다. 코드는 다음과 같습니다.
(load "apply.rkt")
(load "data_structure.rkt")
(load "representation.rkt")
(load "exercise4.3.rkt") ;; 
(load "exercise4.5.rkt")
2, 기본 프로세스에 assoc와cadr를 추가해야 합니다.
(define primitive-procedures
  (list (list 'car car)
        (list 'cdr cdr)
        (list 'cadr cadr)
        (list 'cons cons)
        (list 'null? null?)
        (list '+ +)
        (list 'list list)
        (list 'display display)
        (list 'assoc assoc)))

좋은 웹페이지 즐겨찾기