From f33f96a8382a779d403bdf9d2ffc1c7ba39cf9fe Mon Sep 17 00:00:00 2001 From: Robby Findler Date: Fri, 26 Apr 2013 08:16:17 -0500 Subject: [PATCH] add 'else' support to 2dcond closes PR 13714 original commit: 4bef2987a9e0d03b97b1221f77b8c72ec0bde308 --- collects/unstable/2d/cond.rkt | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/collects/unstable/2d/cond.rkt b/collects/unstable/2d/cond.rkt index 205af00..f0365eb 100644 --- a/collects/unstable/2d/cond.rkt +++ b/collects/unstable/2d/cond.rkt @@ -1,4 +1,5 @@ -#lang racket +#lang racket/base +(require (for-syntax racket/base)) (provide 2dcond) (define-syntax (2dcond stx) @@ -7,6 +8,9 @@ [(cell ...) rhs ...] ...) (let () + (define last-col (- (length (syntax->list #'widths)) 1)) + (define last-row (- (length (syntax->list #'heights)) 1)) + ;; coord-to-content : hash[(list num num) -o> (listof syntax)] (define coord-to-content (make-hash)) (define let-bindings '()) @@ -35,6 +39,16 @@ (cond [(member (list 0 0) cells) (void)] + [(and (or (member (list 0 last-row) cells) + (member (list last-col 0) cells)) + (syntax-case rhses (else) + [(else) #t] + [_ #f])) + ;; found an 'else' (in a reasonable place) + ;; => treat it like a #t in that cell + (hash-set! coord-to-content + (car cells) + (list #'#t))] [(and ;; only one cell: (null? (cdr cells))