syntax-parse can already perform pattern matching. No need to use match

(define-syntax (multi-compose stx)
  (syntax-parse stx
    [(_ f:expr g:expr)
     #'(compose f g)]
    [(_ f:expr funcs:expr ...)
     #'(compose f (multi-compose funcs ...))]))


On Wed, Dec 16, 2020 at 1:37 PM unlimitedscolobb <[email protected]>
wrote:

> On Thursday, December 10, 2020 at 6:01:52 PM UTC+1 unlimitedscolobb wrote:
>
>> On Thursday, December 10, 2020 at 5:49:43 PM UTC+1 [email protected]
>> wrote:
>>
>> A macro might be able to generate either of the above from
>>> (comp f g h k)
>>> .
>>>
>> Indeed. I'm re-reading the docs on macros and I think I see a clean and
>> clear way to achieve what I need.
>>
>> I'll post my attempt as soon as I get the time to write it.
>>
>>
> Okay, so this is my shot:
>
> #lang typed/racket
>
> (require (for-syntax syntax/parse racket/match))
>
> (define-syntax (multi-compose stx)
>   (syntax-parse stx
>     [(_ funcs:expr ...)
>      (match-define (list fn fn-1 fs ...)
>        (reverse (syntax->list #'(funcs ...))))
>      (datum->syntax stx (for/fold ([sexp `(compose ,fn-1 ,fn)])
>                                   ([f (in-list fs)])
>                           `(compose ,f ,sexp)))]))
>
> (multi-compose f1 f2 ... fn-1 fn) expands to (compose f1 (compose f2 ( ...
> (compose fn-1 fn) ... )))
>
> My syntax-transformation-fu is essentially non-existent, even after
> reading through Greg's Fear of Macros multiple times, so please do tell me
> if you see some flagrant opportunities for improvement in the code above.
>
> I'm planning to throw together a small package with compose-n , compose-3
> to compose-10, and multi-compose, and publish it.  It would normally be my
> Christmas package for myself, but it make take some more time :-)
>
> -
> Sergiu
>
> --
> You received this message because you are subscribed to the Google Groups
> "Racket Users" group.
> To unsubscribe from this group and stop receiving emails from it, send an
> email to [email protected].
> To view this discussion on the web visit
> https://groups.google.com/d/msgid/racket-users/219c189f-dd93-4b18-9ef9-2ff477ce3a15n%40googlegroups.com
> <https://groups.google.com/d/msgid/racket-users/219c189f-dd93-4b18-9ef9-2ff477ce3a15n%40googlegroups.com?utm_medium=email&utm_source=footer>
> .
>

-- 
You received this message because you are subscribed to the Google Groups 
"Racket Users" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To view this discussion on the web visit 
https://groups.google.com/d/msgid/racket-users/CADcuegv89YYkzVWRJMu1HCQC7HDH5QzLfdr0_ZKRbiqGzxjneA%40mail.gmail.com.

Reply via email to