Skip to content

Instantly share code, notes, and snippets.

@yao2030
Created April 12, 2013 01:26
Show Gist options
  • Save yao2030/5368560 to your computer and use it in GitHub Desktop.
Save yao2030/5368560 to your computer and use it in GitHub Desktop.
Derived expressions for Let, SICP exercise 4.6
(define (let? exp)
(tagged-list? exp 'let))
(define (let-clauses exp)
(cdr exp))
(define (get-parameters clauses)
(if (null? (car clauses))
'()
(cons (caaar clauses)
(get-parameters (cons (cdar clauses) (cdr clauses))))))
;; Test
;;(get-parameters '(((v1 exp1) (v2 exp2)) 'body))
;Value 11: (v1 v2)
(define (get-exps clauses)
(if (null? (car clauses))
'()
(cons (cadaar clauses)
(get-exps (cons (cdar clauses) (cdr clauses))))))
(define (get-body clauses)
(cdr clauses))
;; Test
;;(get-exps '(((v1 exp1) (v2 exp2)) 'body))
;Value 15: (exp1 exp2)
(define (let->combination cla)
(cons (make-lambda (get-parameters cla) (get-body cla)) (get-exps cla)))
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment