Account Options

  1. Sign in
The old Google Groups will be going away soon, but your browser is incompatible with the new version.
Google Groups Home
« Groups Home
Message from discussion Problem with case

Received: by 10.224.52.195 with SMTP id j3mr1336469qag.0.1348018283079;
        Tue, 18 Sep 2012 18:31:23 -0700 (PDT)
X-BeenThere: racket-users@googlegroups.com
Received: by 10.229.105.85 with SMTP id s21ls755715qco.1.gmail; Tue, 18 Sep
 2012 18:31:22 -0700 (PDT)
Received: by 10.224.52.195 with SMTP id j3mr1336466qag.0.1348018282947;
        Tue, 18 Sep 2012 18:31:22 -0700 (PDT)
Received: by 10.224.52.195 with SMTP id j3mr1336465qag.0.1348018282914;
        Tue, 18 Sep 2012 18:31:22 -0700 (PDT)
Return-Path: <users-boun...@racket-lang.org>
Received: from champlain.ccs.neu.edu (champlain.ccs.neu.edu. [129.10.115.116])
        by gmr-mx.google.com with ESMTPS id g28si459965qcq.2.2012.09.18.18.31.22
        (version=TLSv1/SSLv3 cipher=OTHER);
        Tue, 18 Sep 2012 18:31:22 -0700 (PDT)
Received-SPF: neutral (google.com: 129.10.115.116 is neither permitted nor denied by domain of users-boun...@racket-lang.org) client-ip=129.10.115.116;
Authentication-Results: gmr-mx.google.com; spf=neutral (google.com: 129.10.115.116 is neither permitted nor denied by domain of users-boun...@racket-lang.org) smtp.mail=users-boun...@racket-lang.org
Received: from champlain.ccs.neu.edu (localhost.localdomain [127.0.0.1])
	by champlain.ccs.neu.edu (8.14.4/8.14.4) with ESMTP id q8J1TDYw016200;
	Tue, 18 Sep 2012 21:29:18 -0400
Received: from mail-oa0-f46.google.com (mail-oa0-f46.google.com
	[209.85.219.46])
	by champlain.ccs.neu.edu (8.14.4/8.14.4) with ESMTP id q8J1T6NB016182
	for <us...@lists.racket-lang.org>; Tue, 18 Sep 2012 21:29:06 -0400
Received: by oago6 with SMTP id o6so626942oag.33
	for <us...@lists.racket-lang.org>; Tue, 18 Sep 2012 18:29:06 -0700 (PDT)
	d=google.com; s=20120113;
	h=x-forwarded-to:x-forwarded-for:delivered-to:received-spf
	:dkim-signature:mime-version:in-reply-to:references:date:message-id
	:subject:from:to:cc:content-type:x-gm-message-state;
	bh=GNIQlmDQSOwK3VLMaS9NUB+z+Bg/+GqiWZTIRhKLuoQ=;
	b=ZWs9ZNeupUl8h9hF03VqeZ8n7wJkzmsVBDi3qNVdgpohiWqbPH04/SL/LTaYuY9V9P
	FMhiVZyJ3wmaY/sYxxNOmIy/5lWkTpnKmh7MRJeArvfDTlsyOm0j3EsLiSjRfOE0O06m
	SPo+v6pBhBrqvBvojjB4oOURAWXDmqeXpa/9v2QI5AV5xNA7yAN5z0XeNMrkgKOBDsPT
	oeN/A6iJ8fS9DAxpU7yAsM63iZhWzfEoSfJu5AueIG0kGccTwASEQuy/0yi1SYVBuIK8
	+E372kPmMH7jFQOQv8wmf9aO03o5GTuF+DwOdMsJ8fhUOpN08skNieznSRq+ZWdUUY89
	gBXQ==
Received: by 10.60.29.230 with SMTP id n6mr1770697oeh.123.1348018146540;
	Tue, 18 Sep 2012 18:29:06 -0700 (PDT)
X-Forwarded-To: us...@lists.racket-lang.org
X-Forwarded-For: us...@plt-scheme.org us...@lists.racket-lang.org
Delivered-To: us...@racket-lang.org
Received: by 10.76.13.162 with SMTP id i2csp1125oac;
	Tue, 18 Sep 2012 18:29:05 -0700 (PDT)
Received: by 10.180.103.4 with SMTP id fs4mr3063046wib.16.1348018145210;
	Tue, 18 Sep 2012 18:29:05 -0700 (PDT)
Received: from mail-wi0-f175.google.com (mail-wi0-f175.google.com
	[209.85.212.175])
	by mx.google.com with ESMTPS id w2si3092016wiz.30.2012.09.18.18.29.04
	(version=TLSv1/SSLv3 cipher=OTHER);
	Tue, 18 Sep 2012 18:29:05 -0700 (PDT)
Received-SPF: pass (google.com: domain of zeppi...@gmail.com designates
	209.85.212.175 as permitted sender) client-ip=209.85.212.175;
Received: by wibhm2 with SMTP id hm2so4718181wib.16
	for <us...@racket-lang.org>; Tue, 18 Sep 2012 18:29:04 -0700 (PDT)
MIME-Version: 1.0
Received: by 10.180.108.45 with SMTP id hh13mr3203762wib.15.1348018144272;
	Tue, 18 Sep 2012 18:29:04 -0700 (PDT)
Received: by 10.216.97.3 with HTTP; Tue, 18 Sep 2012 18:29:04 -0700 (PDT)
In-Reply-To: <CAGZAPF4==vmfHisLPsHHMyXNKRAh8+e8EBDjMXw6RNEqiQG...@mail.gmail.com>
References: <CAEEP09D39AMiTozxDCA5WUx4bkE0KtvRY=Ez-dxgpXESigu...@mail.gmail.com>
	<CAKfDxxwJZwPGtejSXh-jGSUFYuj4jxO2eAoA7Wh8_7EE_Q5...@mail.gmail.com>
	<5057AF20.1090...@ccs.neu.edu>
	<CAKfDxxx2Z-UD+odPVYFcFvBJz4o1qUn84+23krVPGz9RLXt...@mail.gmail.com>
	<CB5BE78D-2FB0-403F-8DFE-B0A5E4D2C...@gmail.com>
	<CAAN-iVFFyHyD5uJFcx+F6oHvpJKyj6WdiSsMUAOr04SZw1r...@mail.gmail.com>
	<CAGZAPF4==vmfHisLPsHHMyXNKRAh8+e8EBDjMXw6RNEqiQG...@mail.gmail.com>
Date: Tue, 18 Sep 2012 21:29:04 -0400
Message-ID: <CAKfDxxyGg3NQbVhEytW17puHADBLq7MomBZVgc3F65nkYEH...@mail.gmail.com>
From: Jon Zeppieri <zeppi...@gmail.com>
To: Joe Gilray <jgil...@gmail.com>
X-Gm-Message-State: ALoCoQnQFaJqa/lxKT8EYRgYgeh90EgIDWlY+sj8alIFQaEgHKFvxoNI29Kk2MmzUbKZ4/26YWZM
X-Spam-Status: No, score=-2.7 required=5.0 tests=BAYES_00,DKIM_SIGNED,
	DKIM_VALID, DKIM_VALID_AU, FREEMAIL_FROM,
	RCVD_IN_DNSWL_LOW autolearn=ham version=3.3.1
X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on
	champlain.ccs.neu.edu
Cc: users <us...@racket-lang.org>
Subject: Re: [racket] Problem with case
X-BeenThere: us...@racket-lang.org
X-Mailman-Version: 2.1.12
Precedence: list
List-Id: Racket Users <users.racket-lang.org>
List-Unsubscribe: <http://lists.racket-lang.org/users/options>,
	<mailto:users-requ...@racket-lang.org?subject=unsubscribe>
List-Archive: <http://lists.racket-lang.org/users/archive/>
List-Post: <mailto:us...@racket-lang.org>
List-Help: <mailto:users-requ...@racket-lang.org?subject=help>
List-Subscribe: <http://lists.racket-lang.org/users/listinfo>,
	<mailto:users-requ...@racket-lang.org?subject=subscribe>
Content-Type: text/plain; charset="us-ascii"
Content-Transfer-Encoding: 7bit
Sender: users-boun...@racket-lang.org
Errors-To: users-boun...@racket-lang.org

On Tue, Sep 18, 2012 at 5:29 PM, Danny Yoo <d...@hashcollision.org> wrote:
>
> >
> > I'd like to see a discussion of the tradeoffs between cond & case & match
> > and how each is best used.

1. Use 'cond' where you would use 'if...else if...else' in a C-like
language. It's just a multi-way if:

(cond [(string? value)
           (write-string value out)]
          [(bytes? value)
           (write-bytes value out)]
          [(input-port? value)
           (copy-port value out)]
          [else
           (error "bad value")])

2. Use 'case' (roughly) where you would use 'switch' in C, namely,
when you're comparing the value of an expression against a set of
constants:

(case escape-char
  [(#\n) #\newline]
  [(#\r) #\return]
  [(#\t) #\tab]
  [(#\a) #\u0007]
  [(#\v) #\u000b]
  [(#\f) #\u000c]
  [(#\e) #\u001b]
  [else escape-char])

3. Use 'match' (roughly) where you would use 'case' in ML. I agree
with Danny: it's particularly nice for struct matching:

(: add (All (A) ((Braun A) A -> (Braun A))))
(define (add t a)
  (match t
    [(Braun-Empty)
     (Braun-Tree a t t)]
    [(Braun-Tree x l r)
     (Braun-Tree a (add r x) l)]))

>
>
> I think 'case' is supposed to have good performance compared to the
> other two, due to work by Jon Zeppieri
> (http://lists.racket-lang.org/dev/archive//2012-July/010036.html).
>

The new case implementation isn't in 5.3 or the stable branch on
github. (I assume the nightly builds on racket-lang.org are from the
stable branch?) It's in the master branch.
____________________
  Racket Users list:
  http://lists.racket-lang.org/users