case design

For the Compleat Fan
Locked
ssqq
Posts: 88
Joined: Sun May 04, 2014 12:49 pm

case design

Post 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?

lyl
Posts: 44
Joined: Sun Mar 25, 2018 5:00 am

Re: case design

Post by lyl »

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

TedWalther
Posts: 608
Joined: Mon Feb 05, 2007 1:04 am
Location: Abbotsford, BC
Contact:

Re: case design

Post 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.
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.

Locked