On Fri, Mar 6, 2015 at 4:54 PM, Panicz Maciej Godek <godek.mac...@gmail.com> wrote: > I think that the following code (without additional syntax transformers) > should work for you: > > (define (key->value meta key) > (match meta > (() '()) > ((((? (lambda(x) (equal? x key))) value) rest ...) > value) > (((key value) rest ...) > (key->value (cdr meta))) > (_ > 'key-not-found))) > > but I don't know if that answers your question.
Hi, thanks for your reply! Indeed your function does what I need. > > It seems to me that you are trying to use the value of a function argument > to construct a macro. Even if you managed to make it run somehow (which > should be possible through some nasty hacks), it would be an abuse, because > macros are intended to be used during macro expansion time, and not during > runtime (Oleg Kiselyov showed how to take advantage of macros in runtime, if > you're interested: > http://okmij.org/ftp/Scheme/macros.html#first-class-macros). > > So don't interpret the code that you wrote as "a function that first defines > syntax 'match-key' and then uses that new syntax to generate pattern > matching code", because that's not how it works. The macro expander tries to > substitute the usage of "match-key" macro with appropriate code immediately > upon its usage, before you even run the function. That is exactly the mistake I was doing in my mind. Thanks again for your help! Regards, Fede