Skip to content

Instantly share code, notes, and snippets.

@ijp
Created October 5, 2013 19: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 ijp/6844953 to your computer and use it in GitHub Desktop.
Save ijp/6844953 to your computer and use it in GitHub Desktop.
scheme@(cunning-bot plugins)> ,optimize (define (foo f arg)
(define l '())
(define m
(if (pair? arg)
(begin
(set! l (cdr arg))
(car arg))
arg))
(lambda (x) (apply f m l)))
$6 = (define (foo f arg)
(let ((m (if #f #f)))
(set! m
(if (pair? arg)
(begin (begin (cdr arg) (if #f #f)) (car arg))
arg))
(lambda (x) (f m))))
scheme@(cunning-bot plugins)> ,optimize (define (foo f arg)
(define l '())
(define m
(if (pair? arg)
(begin
(set! l (cdr arg))
(car arg))
arg))
(lambda (x) (apply f m l)))
$7 = (define (foo f arg)
(let ((m (if #f #f)))
(set! m
(if (pair? arg)
(begin (begin (cdr arg) (if #f #f)) (car arg)) ;; no set!, so l never becomes (cdr arg)
arg))
(lambda (x) (f m)))) ;; note, l has turned into '()
scheme@(cunning-bot plugins)> ,optimize (define (foo f arg)
(define l '())
(define m
(if (pair? arg)
(begin
(set! l (cdr arg))
(car arg))
arg))
(lambda (x) (apply f m (pk l))))
$8 = (define (foo f arg)
(let ((l (if #f #f)) (m (if #f #f)))
(begin
(set! l '())
(set! m
(if (pair? arg)
(begin (set! l (cdr arg)) (car arg))
arg)))
(lambda (x) (apply f m (pk l)))))
scheme@(cunning-bot plugins)>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment