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

Reply via email to