[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Do-loop enigma with two variables
From: |
Pierre Lairez |
Subject: |
Do-loop enigma with two variables |
Date: |
Fri, 15 Jul 2016 16:26:48 +0200 |
User-agent: |
Mozilla/5.0 (X11; Linux x86_64; rv:38.0) Gecko/20100101 Thunderbird/38.8.0 |
Dear guile users,
When running the following loop:
(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)
After macro-expansion, the loop above is rewritten in the following:
(letrec ((loop
(λ (i j)
(if (> i 4)
(newline)
(begin
(display (list i j))
(loop (+ 1 i) i))))))
(loop 1 0))
The equality j = i + 1 is clearly a loop invariant, the function “loop“
is *never* called with two equal arguments. So I cannot understand why
(2 2) may possibly appear in the output. What do I not see?
Best regards,
Pierre
signature.asc
Description: OpenPGP digital signature
- Do-loop enigma with two variables,
Pierre Lairez <=
- Re: Do-loop enigma with two variables, Nala Ginrut, 2016/07/15
- Re: Do-loop enigma with two variables, Mike Gran, 2016/07/15
- Re: Do-loop enigma with two variables, Taylan Ulrich Bayırlı/Kammer, 2016/07/16
- Re: Do-loop enigma with two variables, Andy Wingo, 2016/07/16
- Re: Do-loop enigma with two variables, Andy Wingo, 2016/07/16