Skip to content

Instantly share code, notes, and snippets.

@tkroman
Created August 20, 2012 20:11
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save tkroman/3407422 to your computer and use it in GitHub Desktop.
Save tkroman/3407422 to your computer and use it in GitHub Desktop.
let vs let*
;; scheme code:
(define (partial-tree elts n)
(if (= n 0)
(cons '() elts)
(let ((left-size (quotient (- n 1) 2)))
(let ((left-result (partial-tree elts left-size)))
(let ((left-tree (car left-result))
(non-left-elts (cdr left-result))
(right-size (- n (+ left-size 1))))
(let ((this-entry (car non-left-elts))
(right-result (partial-tree (cdr non-left-elts)
right-size)))
(let ((right-tree (car right-result))
(remaining-elts (cdr right-result)))
(cons (make-tree this-entry left-tree right-tree)
remaining-elts))))))))
;; racket code:
(define (my-partial-tree elts n)
(if (= n 0)
(cons '() elts)
(let* ([left-size (quotient (- n 1) 2)]
[left-result (partial-tree elts left-size)]
[left-tree (car left-result)]
[non-left-elts (cdr left-result)]
[right-size (- n (+ left-size 1))]
[this-entry (car non-left-elts)]
[right-result (partial-tree (cdr non-left-elts) right-size)]
[right-tree (car right-result)]
[remaining-elts (cdr right-result)])
(cons (make-tree this-entry left-tree right-tree)
remaining-elts))))
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment