Hi Kevin, Thank you for your suggestions! It is good to know the "big 3". I will read the SRFI 1 documentation.
Jinsong On Thu, Jul 14, 2016 at 1:55 PM, Kevin Wortman <[email protected]> wrote: > > Another perspective, if you're new to Scheme, I'd recommend getting in the > habit of using higher-order procedures before loops. The principle is that > looping is an error-prone (e.g. infinite loops) low level operation, so > it's best to factor that out and use an established and tested library > procedure instead of writing new iteration logic each time. > > The big 3 are filter, fold, and map in SRFI 1 ( > http://wiki.call-cc.org/man/4/Unit%20srfi-1 ). > > I'd actually implement your pseudocode with > > (for-each (lambda (i) > (for-each (lambda (j) > (for-each (lambda (k) > (print (+ i j k))) > '(7 8 9))) > '(4 5 6))) > '(1 2 3)) > > You mentioned "calculation" so I wager you'll actually want to use fold, > not for-each. > > Regards, > Kevin Wortman > > > On Thu, Jul 14, 2016 at 7:04 AM Jinsong Liang <[email protected]> > wrote: > >> Wow, this is amazing! Thanks a lot Christian! >> >> Jinsong >> >> On Thu, Jul 14, 2016 at 3:05 AM, Christian Kellermann < >> [email protected]> wrote: >> >>> * Jinsong Liang <[email protected]> [160714 04:26]: >>> > Hi, >>> > >>> > I want to do nested loops over three lists like the following pseudo >>> code: >>> > >>> > for i in '(1 2 3) >>> > for j in '(4 5 6) >>> > for k in '(7 8 9) >>> > //do calculation using i, j, and k. The three lists are not >>> > related. >>> > end >>> > end >>> > end >>> > >>> > What is the best way to do this in Chicken? I can use (for-each ...) >>> or (do >>> > ...) but it seems neither is straightforward. >>> >>> Without knowing the purpose of this it's hard to say. However scheme >>> is flexible enough to allow an almost verbatim translation using >>> foof-loop: >>> >>> (use foof-loop) >>> >>> (loop ((for i (in-list '(1 2 3)))) >>> (loop ((for j (in-list '(4 5 6)))) >>> (loop ((for k (in-list '(7 8 9)))) >>> (print "Magic " i "+" j "+" k " = " >>> (+ i j k))))) >>> >>> HTH, >>> >>> Christian >>> >>> -- >>> May you be peaceful, may you live in safety, may you be free from >>> suffering, and may you live with ease. >>> >> >> _______________________________________________ >> Chicken-users mailing list >> [email protected] >> https://lists.nongnu.org/mailman/listinfo/chicken-users >> >
_______________________________________________ Chicken-users mailing list [email protected] https://lists.nongnu.org/mailman/listinfo/chicken-users
