Page 1 of 1

case design

PostPosted: Mon Aug 22, 2016 2:12 pm
by ssqq
Code: Select all
(constant 'Type 1)

(define (check-type x)
  (case
    (Type (println "it is Type"))
    (true (println "it is not Type"))))

(check-name 1)

(exit)

==> it is not Type

For: case
syntax: (case exp-switch (exp-1 body-1) [(exp-2 body-2) ... ])

The result of evaluating exp-switch is compared to each of the unevaluated expressions exp-1, exp-2,

I want to know Why make case expression with unevaluated?

Re: case design

PostPosted: Wed Jun 05, 2019 8:42 am
by lyl
I meet this problem too, and has been waiting for answer!

Re: case design

PostPosted: Thu Jun 06, 2019 4:21 pm
by TedWalther
case doesn't evaluate the conditions. So if you call check-type 1, it compares Type to 1, and of course they aren't the same. If you called (check-type 'Type) it would work. Or if you changed the condition to (case x (1 (println "the type is Type"))) it would work.

As for the "why"? I don't know. Perhaps it is because that is how it normally is in LISP. Ancient tradition.

If you want the condition evaluated, you can use cond instead of case.