Thomas Morley <[email protected]> writes:

> 2015-04-08 12:04 GMT+02:00 David Kastrup <[email protected]>:

[...]

>>> (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

_______________________________________________
lilypond-devel mailing list
[email protected]
https://lists.gnu.org/mailman/listinfo/lilypond-devel

Reply via email to