Den tor. 13. aug. 2020 kl. 21.55 skrev Kevin Forchione <lyss...@gmail.com>:
> Hi guys, > > Pollen makes use of something like this: > > (require syntax/parse/define) > > (define-simple-macro (#%top . x) 'x) > > > and it comes in handy in some of my projects. But I’m wondering if there’s > an equivalent for redirecting an application that hasn’t been defined? > > In other words, if foo is not a procedure then (foo 1 2 3) would redirect > to (do-this foo 1 2 3) where do-this is defined? > > Any help is appreciated. > Hi Kevin, In Bracket [1] used your idea to produce s-expression, if the first argument of #%app isn't a function: ; In the BRACKET language an application of ; a non-function evaluates to an expression. (define-syntax (sym-app stx) (syntax-case stx () [(_ op arg ...) (quasisyntax/loc stx (let ([o op]) (if (procedure? o) #,(syntax/loc stx (#%app o arg ...)) (if (holdable? o) (cons o '(arg ...)) (cons o (list arg ...))))))])) There is an additional wrinkle - if a function is "holdable" it "holds" (postpones) the evaluation of its arguments. This can simply we be removed, if you don't need it. More details here: https://github.com/soegaard/bracket/blob/master/bracket/bracket.rkt#L80 /Jens Axel https://racket-stories.com -- 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 racket-users+unsubscr...@googlegroups.com. To view this discussion on the web visit https://groups.google.com/d/msgid/racket-users/CABefVgxOx-v%2BZTMGB2tzxmrvb0PamAs4J%3Dg0ovBMTJT8D1bosw%40mail.gmail.com.