Code Review

Compare your solutions

    #| BEGIN (Write your solution here) |#
(define (let->combination exp)
  (let ((name (let-name exp)))
    (if (null? name)
        (cons (make-lambda (let-vars exp) (let-body exp))
              (let-exps exp))
        (cons 'begin
            (list (cons 'define
                        (cons (cons (let-name exp) (let-vars exp))
                              (let-body exp)))
                  (cons (let-name exp) (let-exps exp)))))))

(define (make-define name val)
  (cons 'define (cons name val)))

(define (named-let? exp)
  (not( null? (cdddr exp))))

(define (let-name exp)
  (if (named-let? exp)
      (cadr exp)
      '()))

(define (let-vars exp)
  (if (named-let? exp)
      (map car (caddr exp))
      (map car (cadr exp))))

(define (let-exps exp)
  (if (named-let? exp)
      (map cadr (caddr exp))
      (map cadr (cadr exp))))

(define (let-body exp)
  (if (named-let? exp)
      (cdddr exp)
      (cddr exp)))
#| END |#