[prev in list] [next in list] [prev in thread] [next in thread] 

List:       lilypond-user
Subject:    Re: [frogs] Re: Naming output files
From:       Marek Klein <marek () gregoriana ! sk>
Date:       2009-02-26 22:18:48
Message-ID: 52e73a2f0902261418i25f75620m226a64b4aee3af08 () mail ! gmail ! com
[Download RAW message or body]

2009/2/26 Reinhold Kainhofer <reinhold@kainhofer.com>

>
> On Donnerstag, 26. Februar 2009 22:38:53 Marek Klein wrote:
> >        (output-count (assoc-ref counter-alist 'output-suffix))
> >        (base (ly:parser-output-name parser))
> >        (output-suffix (ly:parser-lookup parser 'output-suffix)) )
>
> You need to reverse this! The key for the assoc-ref lookup should NOT be
> the
> 'output-suffix symbol (note the '), but rather the value output-suffix,
> which
> you look up only later. So, simply move the definition of output-count
> after
> the output-suffix and use output-suffix instead of 'output-suffix.
>
> Later on, you use output-suffix in assoc-set!, so you need to use the same
> value in the assoc-ref, too.
>
> Cheers,
> Reinhold
>

Thank you,
now it works as expected:

(define counter-alist '())

(define (print-book-with parser book process-procedure)
  (let*
      ((paper (ly:parser-lookup parser '$defaultpaper))
       (layout (ly:parser-lookup parser '$defaultlayout))
       (output-suffix (ly:parser-lookup parser 'output-suffix))
       (output-count (assoc-ref counter-alist output-suffix))
       (base (ly:parser-output-name parser)) )

      (if (string? output-suffix)
    (set! base (format "~a-~a" base (string-regexp-substitute
                       "[^a-zA-Z0-9-]" "_" output-suffix))))

    ;; must be careful: output-count is under user control.
    (if (not (integer? output-count))
    (set! output-count 0))

    (if (> output-count 0)
    (set! base (format #f "~a-~a" base output-count)))
    (set! counter-alist (assoc-set! counter-alist output-suffix (1+
output-count)))

What about set! versus ly:parser-define! ?

-- 
Marek Klein
http://gregoriana.sk

[Attachment #3 (text/html)]

<br><div class="gmail_quote">2009/2/26 Reinhold Kainhofer <span dir="ltr">&lt;<a \
href="mailto:reinhold@kainhofer.com">reinhold@kainhofer.com</a>&gt;</span><br><blockquote \
class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt \
0pt 0.8ex; padding-left: 1ex;"> <div class="Ih2E3d"><br>
</div><div class="Ih2E3d">On Donnerstag, 26. Februar 2009 22:38:53 Marek Klein \
wrote:<br> &gt;        (output-count (assoc-ref counter-alist \
&#39;output-suffix))<br> &gt;        (base (ly:parser-output-name parser))<br>
&gt;        (output-suffix (ly:parser-lookup parser &#39;output-suffix)) )<br>
<br>
</div>You need to reverse this! The key for the assoc-ref lookup should NOT be \
the<br> &#39;output-suffix symbol (note the &#39;), but rather the value \
output-suffix, which<br> you look up only later. So, simply move the definition of \
output-count after<br> the output-suffix and use output-suffix instead of \
&#39;output-suffix.<br> <br>
Later on, you use output-suffix in assoc-set!, so you need to use the same<br>
value in the assoc-ref, too.<br>
<div class="Ih2E3d"><br>
Cheers,<br>
Reinhold<br>
</div></blockquote></div><br>Thank you, <br>now it works as expected:<br><br>(define \
counter-alist &#39;())<br><br>(define (print-book-with parser book \
process-procedure)<br>  (let*<br>      ((paper (ly:parser-lookup parser \
&#39;$defaultpaper))<br>  (layout (ly:parser-lookup parser &#39;$defaultlayout))<br>  \
(output-suffix (ly:parser-lookup parser &#39;output-suffix)) <br>       (output-count \
(assoc-ref counter-alist output-suffix))<br>       (base (ly:parser-output-name \
parser)) )<br>  <br>      (if (string? output-suffix)<br>    (set! base (format \
&quot;~a-~a&quot; base (string-regexp-substitute<br>                       \
&quot;[^a-zA-Z0-9-]&quot; &quot;_&quot; output-suffix))))<br><br>    ;; must be \
careful: output-count is under user control.<br>  (if (not (integer? \
output-count))<br>    (set! output-count 0))<br><br>    (if (&gt; output-count 0)<br> \
(set! base (format #f &quot;~a-~a&quot; base output-count)))<br>    (set! \
counter-alist (assoc-set! counter-alist output-suffix (1+ output-count)))<br> <br \
clear="all">What about set! versus ly:parser-define! ?<br><br>-- <br>Marek \
Klein<br><a href="http://gregoriana.sk">http://gregoriana.sk</a><br>



[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic