[CM] rewrite output in CM

Drew Krause drkrause@mindspring.com
Tue, 26 Oct 2004 22:24:03 -0400


I just answered my own question, in a somewhat convoluted way... here it 
is, for anyone interested:

;; MTRULES -- morse-thue rules
(define mtrules '((0 -> (0 1))
                 (1 -> (1 0))))

;; RW-NEXT -- returns next complete generation of rewrite
;; rwthing = rules; alist = input string
;; example: (rw-next mtrules '(1 0)) = (1 0 0 1)
(defun rw-next (rwthing alist)
 (let* ((this-rw (new rewrite of (append rwthing '((rw-end -> rw-end)))
                      :initially (append alist (list 'rw-end))))
        (sink (next this-rw (+ (length alist) 1))))
   (loop for x = (next this-rw) until (eql x 'rw-end) collect x)))

;; RWGEN -- returns arbitrary generation of rewrite
;; (rwgen mtrules '(1 0) 2) =  (1 0 0 1 0 1 1 0)
(defun rwgen (rwrules initgen gennbr)
 (case gennbr
   (0 initgen)
   (1 (rw-next rwrules initgen))
   (t (rw-next rwrules (rwgen rwrules initgen (- gennbr 1))))))

Drew

Drew Krause wrote:

> I need help with output options for the "rewrite" pattern. As an 
> example, suppose I create a morse-thue sequence:
>
> (define mt (new rewrite of '((0 -> (0 1))
>                             (1 -> (1 0)))
>                :initially '(1 0)))
>
> How can I get a new complete L-to-R generation on each call, a la:
>
> (1 0) ; {we can skip this step if we have to}
> (1 0 0 1)
> (1 0 0 1 0 1 1 0)
> &c.
>
> All help much appreciated!
>
> Drew
>
> _______________________________________________
> Cmdist mailing list
> Cmdist@ccrma.stanford.edu
> http://ccrma-mail.stanford.edu/mailman/listinfo/cmdist
>