[racket-dev] Proposed addition of #:where clause to the match library

From: Asumu Takikawa (asumu at ccs.neu.edu)
Date: Fri Oct 24 16:05:15 EDT 2014

Hi Michael,

On 2014-10-24 17:55:24 +0000, Michael Bernstein wrote:
>    Proposed Racket version (based on the Erlang example)
>    uses #:where keyword:
>    (define/match (insert X lst)
>      [{ X '() }                          (list X)]
>      [{ X (cons H T) } #:where (<= X H)  (list* X H T)]
>      [{ X (cons H T) }                   (cons H (insert X T))])
>    (define (insertion-sort lst)
>      (foldl insert '() lst))

You can write this as:

  (define/match (insert X lst)
    [{ X '() }                          (list X)]
    [{ X (cons H T) } #:when (<= X H)   (list* X H T)]
    [{ X (cons H T) }                   (cons H (insert X T))])
  (define (insertion-sort lst)
    (foldl insert '() lst))

Note that #:where is replaced by #:when. I believe this works in Racket
v6.0 and later.

Cheers,
Asumu

Posted on the dev mailing list.