guile-user
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: Is it possible to expand syntax inside match?


From: Maxime Devos
Subject: Re: Is it possible to expand syntax inside match?
Date: Sun, 24 Oct 2021 19:48:01 +0000
User-agent: Evolution 3.38.3-1

Михаил Бахтерев schreef op zo 24-10-2021 om 11:49 [+0500]:
> Greetings!
> 
> I wondering, if is it possible to implement something like
> this?
> 
> (define-syntax R (syntax-rules () ((_ r v l) #(red r v l))))
> (define-syntax B (syntax-rules () ((_ r v l) #(black r v l))))
> 
> (define red-black-set-balance 
>   (match-lambda
>     ((or (B (R (R a x b) y c) z d)
>          (B (R a x (R b y c)) z d)
>          (B a x (R (R b y c) z d))
>          (B a x (R b y (R c z d)))) (R (B a x b) y (B c z d)))
>     (node node)))

Not exactly what you were looking for, but maybe use quasisyntax /
unsyntax #` #, something like (untested):

;; define, not define-syntax!
(define R (syntax-rules () ((_ r v l) #(red r v l))))
(define B (syntax-rules () ((_ r v l) #(black r v l))))

(define-syntax red-black-set-balance-m
  (lambda (s)
    #`(match-lambda
        ((or #,(B (R (R a x b) y c) z d)
             #,(B (R a x (R b y c)) z d)
             ...))
        (node node))))

(define red-black-set-balance red-black-set-balance-m)


Greetings,
Maxime




reply via email to

[Prev in Thread] Current Thread [Next in Thread]