lilypond-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: banter-style from chord-names-jazz.ly broken, 'case'-problem


From: David Kastrup
Subject: Re: banter-style from chord-names-jazz.ly broken, 'case'-problem
Date: Wed, 08 Apr 2015 13:21:00 +0200
User-agent: Gnus/5.13 (Gnus v5.13) Emacs/25.0.50 (gnu/linux)

Thomas Morley <address@hidden> writes:

> 2015-04-08 12:04 GMT+02:00 David Kastrup <address@hidden>:

[...]

>>> (display (eqv? -1 DOUBLE-FLAT))
>>> -> #t
>>>
>>> (display
>>>  (case -1
>>>    ((DOUBLE-FLAT) "--")
>>>    ((FLAT) "-")
>>>    ((NATURAL) "")
>>>    ((SHARP) "+")
>>>    ((DOUBLE-SHARP) "++")))
>>> -> #<unspecified>

>> That one's easy.  As may be expected from the case-tag being in the form
>> of an unquoted list, there is no evaluation involved.
>>
>> So the case statement is comparing to the symbols DOUBLE-FLAT, FLAT, etc
>> as opposed to the values stored in the variables associated with the
>> symbols.
>
> The guile manual says:
>
> "
> — syntax: case key clause1 clause2 ...
>
> key may be any expression, the clauses must have the form
>
>           ((datum1 ...) expr1 expr2 ...)
>
> and the last clause may have the form
>
>           (else expr1 expr2 ...)
>
> All datums must be distinct. [...]
> "
>
> "distinct" is not really meaningful ...

It also says:

     All DATUMs must be distinct.  First, KEY is evaluated.  The the
     result of this evaluation is compared against all DATUMs using
     `eqv?'.  When this comparison succeeds, the expression(s) following
     the DATUM are evaluated from left to right, returning the value of
     the last expression as the result of the `case' expression.

So the description explicitly points out whenever something is
evaluated.  It does not explicitly point out that the DATUMs are *not*
evaluated.  Given the frequency with which people are surprised at
`case' behavior (one frequent surprise is that it doesn't work for
strings, for example), it might be worth pointing out explicitly what
kind of things *won't* work with case.

-- 
David Kastrup



reply via email to

[Prev in Thread] Current Thread [Next in Thread]