[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