Note that you can use symbols with the case construct.  In other words, these 
two expressions are equivalent if str is a string:

 (cond ((string=? str "foo") 111)
       ((string=? str "bar") 222)
       (else                 333))

and

 (case (string->symbol str)
   ((foo) 111)
   ((bar) 222)
   (else  333))

Marc

> On Jan 19, 2017, at 5:32 AM, Damien MATTEI <[email protected]> wrote:
> 
> Hello Manuel,
> i forward my answer because it seems impossible to reach both bigloo and kawa 
> mailing list ,messages do not go in kawa,only bigloo mailing list.
> 
> i know R5RS specify to use eq? predicate for comparison but this exclude the 
> use of strings in programming with CASE 
> of course i could use COND or try to write a macro as i'm doing.
> Damien 
> ----------  Message transmis  ----------
> 
> Sujet : Re: behavior of CASE with strings PART 2
> Date : jeudi 19 janvier 2017
> De : Damien MATTEI <[email protected]>
> À : [email protected]
> 
> Le Thursday 19 January 2017 05:53:05 Per Bothner, vous avez écrit :
>> 
>> On 01/17/2017 10:36 PM, Per Bothner wrote:
>>> I think this is something to think of for the Kawa 3.0 release,
>>> using the new PATTERN construct in each clause.
>> 
>> The invoke branch has a 'match' form, which has the syntax:
>> 
>> (match TARGET-EXPR (PATTERN BODY...) ...)
>> 
>> This matches TARGET-EXPR against each PATTERN, until one matches,
>> at which point the BODY... forms are evaluated.
>> 
>> This is the 'match' form from Racket:
>>  https://docs.racket-lang.org/guide/match.html
>>  https://docs.racket-lang.org/reference/match.html
>> 
>> Unfortunately, the implemented forms of PATTERN are very
>> limited, but the intention to allow literals and quoted forms.
>> These will be compared using equal?, so you will be able to write:
>> 
>>   (match "yes"
>>    ("no" #f)
>>    ("yes" #t))
>> 
>> THIS IS NOT YET IMPLEMENTED.  (It's not conceptually hard; I just need to
>> decide the best way to present such match forms.)
>> 
>> I think this is the generalization of 'case' that we're looking for.
> 
> Hi Per,
> 
> thanks for your answer...
> i read the many answers to the mailing list about CASE and STRINGS and 
> delayed my answer because i 
> wanted to answer after having a solution (still not done)
> 
> i understand the various implementation of Scheme follow or not the R5RS and 
> R7RS
> but this could be changed in a future revision because it is limitating to be 
> able to use CASE with STRINGS
> in language such as ASP, Java and not Scheme, with Racket it seems that 
> equal? predicate is used,
> so probably my code will work with Racket.
> 
> i think of many solutions and finalyy begin to write a  recursive macro 
> implementing a case-string
> but i'm facing proble with multiple "ellipsis" in a recursive macro and 
> wanted to debug it this morning 
> when  i read your last message, so here it is:
> 
> ;; CASE adapted for string comparison
> 
> (define-syntax case-string
> 
> (syntax-rules ()
> 
>   ((_ var
>       (lst res)
>       (... ...)
>       (else => res-else))
> 
>    (if (member var lst)
>        res
>        (case var
>          (... ...)
>          (else => res-else))))
> 
>   ((_ var
>       (else => res-else))
> 
>    res-else)))
> 
> ellispsis have to be fixed and the behavior seems to be not defined in R5RS i 
> tried many scheme and it behave diffrently, even in Racket with #lang R5RS
> it does not work now
> 
> Damien
> 
> -- 
> [email protected], [email protected], UNS / OCA / CNRS
> 
> -------------------------------------------------------
> 
> -- 
> [email protected], [email protected], UNS / OCA / CNRS

Reply via email to