[CM] CM's loop macro, issues/incompleteness of implementation?

Orm Finnendahl orm.finnendahl at selma.hfmdk-frankfurt.de
Sun Apr 19 00:51:15 PDT 2020

Hi Iain,

 some of the differences out of my head:

- no argument destructuring like

  (loop for (x y . rest) on seq
        while y
        do (display (format "~a~%" (cons (+ x y) rest))))

- no array traversal like

  (loop for x across my-array do (display (format "~a~%" x))

- no hash table traversal like

  (loop for k
        being the hash-key
        using (hash-value v) of h
        do (display (format "~a ~a~%" k v)))

There are more things loop provides which weren't considered essential
or even useful in the context of a process. IIRC things like
"collect", "append" or "into" aren't present. To assemble a complete
list check the loop chapter in cltl2 here:


More importantly there are bugs in the code when variables reference
each other like this:

   for a in '(0 1 2)
   for b = a then (+ a 1)
   do (display (format "a: ~a, b: ~a~%" a b))))

-> a: 0, b: #f
-> a: 1, b: 1
-> a: 2, b: 2

The expected output would be:

-> a: 0, b: 0
-> a: 1, b: 2
-> a: 2, b: 3

I fixed it in the CL code base in my github repository of CM. It
shouldn't be too difficult to translate that into scheme.

With the current code base I think it's a good idea to advise users
against cross referencing variables in the initialization and updating
phase of the process form.


Am Samstag, den 18. April 2020 um 18:53:29 Uhr (-0700) schrieb Iain Duncan:
> Hi everyone, there was a comment a while back that the loop macro provided
> by the CM scheme code is not a perfect implementation of CL's loop. I'd
> like to use it in Scheme for Max, but as I don't know either CL or CM well,
> can anyone tell me more about where this diverges or doesn't implement the
> "normal" CL loop macro? I want to make sure I document this properly for
> users coming from CL.
> thanks
> iain

> _______________________________________________
> Cmdist mailing list
> Cmdist at ccrma.stanford.edu
> https://cm-mail.stanford.edu/mailman/listinfo/cmdist

More information about the Cmdist mailing list