chicken-users
[Top][All Lists]
Advanced

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

Re: [Chicken-users] Problem with (fold)


From: Peter Bex
Subject: Re: [Chicken-users] Problem with (fold)
Date: Tue, 11 Mar 2014 15:41:31 +0100
User-agent: Mutt/1.4.2.3i

On Tue, Mar 11, 2014 at 03:30:56PM +0100, Daniel Carrera wrote:
> Hello,
> 
> I'm having a problem with (fold):
> 
> 
> (use srfi-1)  ; List library.
> 
> (fold (lambda (a b) (+ (* a 10) b)) 0 '(1 2 3))
> 
> I was expecting this to return 123, but it returns 60. I'm confused. In my
> mind, at each step I shift the current value to the left (i.e. multiply by
> 10) and add the new digit. So the steps should be:
> 
> 1 , 2 --> 10 + 1 = 12
> 12 , 3 --> 120 + 3 = 123
> 
> What am I missing?

You need to multiply the "memo" by 10, not the item:

#;1> (use srfi-1)
#;2> (fold (lambda (a b) (print `(+ (* ,a 10) ,b)) (+ (* a 10) b)) 0 '(1 2 3))
(+ (* 1 10) 0)
(+ (* 2 10) 10)
(+ (* 3 10) 30)
60
#;3> (fold (lambda (a b) (+ (* b 10) a)) 0 '(1 2 3))
123

To avoid such mistakes, it's helpful to use mnemonic names:

(fold (lambda (item result) (+ (* result 10) item)) 0 '(1 2 3))

Cheers,
Peter
-- 
http://www.more-magic.net



reply via email to

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