On Fri, Mar 2, 2012 at 5:04 PM, Jim Ursetto <[email protected]> wrote:

> eqv?, to be exact.  Your case statement works fine for me, with for
> example (comp->text '=).  (eq? comp =) compares against the value of the *
> procedure* =, whereas the case compares against the symbol =.  So you are
> doing two different comparisons.
>

I'm trying to convert a comparison operator to the equivalent text. These
are not symbols. I think case treats the target list as if it was created
with a quote: '(>). Thus things are all symbols in the list and the eqv?
returns false.

> (case > ((>) "yup")(else "nope"))
"nope"
> (cond ((eqv? > >) "yup")(else "nope"))
"yup"
>

The cond does what I need just fine, I just didn't understand why case
didn't also work.

Is there a more schemeish way to convert any of the operators to the text
representation?

(define gt >)
(op->string gt)
 => ">"


> You can use *,x (case ...)* at the REPL to see what the case expands to.
>
> Fake edit: Kon said this more succinctly than I did.
> Jim
>
> On Mar 2, 2012, at 5:52 PM, Matt Welland wrote:
>
> I expected this to work:
>
> (define (comp->text comp)
>   (case comp
>    ((=)    "=")
>    ((>)    ">")
>    ((<)    "<")
>    ((>=)  ">=")
>    ((<=)  "<=")
>    (else "unk")))
>
> But had to convert to a cond with (eq? comp =) etc...
>
> I thought case was supposed to use eq? to do the compare?
>
>
>
_______________________________________________
Chicken-users mailing list
[email protected]
https://lists.nongnu.org/mailman/listinfo/chicken-users

Reply via email to