I was peeved today to come across a bug that manifested itself when I
removed a pk from a particular value in my code.
Time to play "spot the difference"
scheme@(guile-user)> ,optimize (define (foo f arg)
(let* ((l '())
(m (if (pair? arg)
(begin
(set! l (cdr arg))
(car arg))
arg)))
(lambda () (apply f m l))))
$14 = (define (foo f arg)
(let ((m (if (pair? arg)
(begin (begin (cdr arg) (if #f #f)) (car arg))
arg)))
(lambda () (f m))))
scheme@(guile-user)> ,optimize (define (foo2 f arg)
(let* ((l '())
(m (if (pair? arg)
(begin
(set! l (cdr arg))
(car arg))
arg)))
(lambda () (apply f m (pk l)))))
$15 = (define (foo2 f arg)
(let* ((l '())
(m (if (pair? arg)
(begin (set! l (cdr arg)) (car arg))
arg)))
(lambda () (apply f m (pk l)))))
and if you actually define those procedures and run them
scheme@(guile-user)> ((foo list '(a b c)))
$16 = (a)
scheme@(guile-user)> ((foo2 list '(a b c)))
;;; ((b c))
$17 = (a b c)
I'm currently on the lua branch, which means branches from master at
6871327742d3e1a0966aa8fed04c911311c12c2a (Aug 31). I'll try on a more
recent master or stable when I have time.
--
Ian Price -- shift-reset.com
"Programming is like pinball. The reward for doing it well is
the opportunity to do it again" - from "The Wizardy Compiled"