case design

Started by ssqq, August 22, 2016, 07:12:05 AM

Previous topic - Next topic

ssqq


(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[size=150] unevaluated [/size]expressions exp-1, exp-2,



I want to know Why make case expression with unevaluated?

lyl

#1
I meet this problem too, and has been waiting for answer!

TedWalther

#2
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.
Cavemen in bearskins invaded the ivory towers of Artificial Intelligence.  Nine months later, they left with a baby named newLISP.  The women of the ivory towers wept and wailed.  \"Abomination!\" they cried.