[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: A macro and an unwanted containing list in the resulting form
From: |
Sebastian Tennant |
Subject: |
Re: A macro and an unwanted containing list in the resulting form |
Date: |
Wed, 23 May 2007 15:51:02 +0300 |
User-agent: |
Gnus/5.110006 (No Gnus v0.6) Emacs/22.0.95 (gnu/linux) |
Quoth "Juanma Barranquero" <lekktu@gmail.com>:
> On 5/23/07, Sebastian Tennant <sebyte@smolny.plus.com> wrote:
>> (cond (((equal e "hello") (message "hi"))
>> ^((equal e "goodbye") (message "bye"))))
>> | ^
>> | |
>> +--------- unwanted list -------------+
>>
>> Clearly my approach is wrong (because this is how mapcar behaves), so
>> what is the best way to go about this?
>
> Try with
>
> (defmacro build-cond (alist)
> (append '(cond)
> (mapcar '(lambda (each)
> (cons (list 'equal 'my-var (car each)) (list (cdr
> each))))
> alist)))
Hmm. Thanks a lot. It works. (Now I need to grok exactly why).
> Is there any reason to make the argument of build-cond an alist? You
>could try
>
> (defmacro build-cond (&rest conds)
> (append '(cond)
> (mapcar '(lambda (each)
> (cons (list 'equal 'my-var (car each)) (list (cdr each))))
> conds)))
>
> and then use
>
> (build-cond ("hello" . (message "hi"))
> ("goodbye" . (message "bye"))
The reason for the alist is the clauses are being passed as one of a
number of arguments to a function call.
Thanks again.
Sebastian