[gambit-list] Idiomatic Scheme

Frederick LeMaster fred.lemaster at gmail.com
Thu Jan 19 19:21:38 EST 2012


The case form auto-quotes the elements at the head of each branch so
the correct code would be:
(define (make-f)
  (lambda (message . arguments)
    (case message
        ((get!) (display "get"))
        ((size) (display "size"))
        (else (display "no match")))))

Hope that helps.
-Fred

On Fri, Jan 20, 2012 at 7:39 AM, Roger Wilson
<misterrogerwilson at gmail.com> wrote:
> Hi,
>
> Thanks for all the input guys.  It all makes sense.
>
> I have a question on the cond/case option though.  More one for
> StackOverflow really but...
>
> (define (make-f)
>   (lambda (message . arguments)
>     (case message
>         (('get!) (display "get"))
>         (('size) (display "size"))
>         (else (display "no match")))))
>
> (define f (make-f))
> (f 'size)
>
>> "no match"
>
> (define (make-g)
>   (lambda (message . arguments)
>     (display message) (newline)
>     (cond
>         ((eq? message 'get!) (display "get"))
>         ((eq? message 'size) (display "size"))
>         (else (display "no match")))))
>
> (define g (make-g))
> (g 'size)
>
>> "size"
>
> How do I get the make-f variant using case to do what I want?  I guess this
> is a eqv? vs eq? thing, or am I missing a quote somewhere?
>
> Thanks,
> Roger.
>
>
>>
>>
>> ---------- Forwarded message ----------
>> From: "Adrien Piérard" <pierarda at iro.umontreal.ca>
>> To: Mikael <mikael.rcv at gmail.com>
>> Cc: gambit-list at iro.umontreal.ca
>> Date: Thu, 19 Jan 2012 21:50:29 +0900
>> Subject: Re: [gambit-list] Idiomatic Scheme
>> Hi again,
>>
>> I couldn't resist answering more :)
>>
>> >> In particular I'm unhappy with the way the message arguments are
>> >> accessed as (car arguments) rather than by explicit name.  I can see that
>> >> being a potential cause of bugs if the number of arguments grows and they
>> >> vary with each message.
>>
>> You'll probably enjoy optional parameters, then, even though my code
>> sample is not really portable extensible:
>>
>> (lambda (message #!optional arg1)
>>  (case message
>>    ((:put-name!)
>>     (push (make-blob-name arg1) unused-name-list)
>>     (randomise-list))
>>    ...))
>>
>> By the way, why sort the list?
>> Why not also let the constructor of your data type assign the random
>> value?
>> I barely use DEFINE-TYPE, but I guess there's a way to make the
>> constructor call a function to generate the random value or something
>> like that.
>> Unfortunately, (random init: (random-integer 42)) doesn't work.
>>
>> > maybe switch the cond to a case?
>>
>> Indeed, that too.
>>
>> P!
>> --
>> Français, English, 日本語, 한국어
>>
>>
>> _______________________________________________
>> Gambit-list mailing list
>> Gambit-list at iro.umontreal.ca
>> https://webmail.iro.umontreal.ca/mailman/listinfo/gambit-list
>>
>
>
> _______________________________________________
> Gambit-list mailing list
> Gambit-list at iro.umontreal.ca
> https://webmail.iro.umontreal.ca/mailman/listinfo/gambit-list
>



More information about the Gambit-list mailing list