guile-user
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: Do-loop enigma with two variables


From: Andy Wingo
Subject: Re: Do-loop enigma with two variables
Date: Sat, 16 Jul 2016 11:15:10 +0200
User-agent: Gnus/5.13 (Gnus v5.13) Emacs/24.5 (gnu/linux)

On Fri 15 Jul 2016 16:26, Pierre Lairez <address@hidden> writes:

> (do ((i 1 (+ 1 i))
>      (j 0 i))
>     ((> i 4) (newline))
>   (display (list i j)))
>
> I expect without hesitation to read
> (1 0)(2 1)(3 2)(4 3)
>
> To my surprise, I obtain
> (1 0)(2 2)(3 3)(4 4)

What a mess!

This is an optimizer bug in Guile 2.0 somehow.  This code is small
enough for it to be partially evaluated.  These forms expand to the same
thing, but in Guile 2.0:

  > ,optimize (do ((i 1 (+ 1 i))
                   (j 0 i))
                  ((> i 4) (newline))
                (display (list i j)))
  (begin
    (display (list 1 0))
    (begin
      (display (list 2 2))
      (begin
        (display (list 3 3))
        (begin (display (list 4 4)) (newline)))))


whereas in Guile master (2.1.3 or whatever):

  > ,optimize (do ((i 1 (+ 1 i))
                   (j 0 i))
                  ((> i 4) (newline))
                (display (list i j)))
  (begin
    (display (list 1 0))
    (display (list 2 1))
    (display (list 3 2))
    (display (list 4 3))
    (newline))

How embarrassing.  I will work on a fix.

Andy



reply via email to

[Prev in Thread] Current Thread [Next in Thread]