Hi, Jinsong--

On Fri, May 29, 2015 at 6:25 PM, Jinsong Liang <jinsongli...@gmail.com>
wrote:

>
> I want to learn some basic macro programming in Chicken. However, it seems
> there are multiple macro definition APIs in Chicken: define-syntax,
> syntax-rules, syntax-case, define-macro. Which one should I start with?
>

It can indeed be a bit confusing, and my knowledge is not very advanced,
but here's what I know:

  * define-macro is old. I'm not sure it is even still supported in Chicken
4.x, but
     it's certainly not recommended.

  * define-syntax is currently the primary macro form, and you use it
together with syntax-rules. E.g.:

        (define-syntax NAME
            (syntax-rules ()
                (PATTERN BODY) .... ))

   * I've never used syntax-case - which is not to say that you shouldn't,
but I'm pretty sure it is not considered "basic."

If the Chicken documents don't give you enough information, I've found Kent
Dybvig's book _The Scheme Programming Language_ helpful in learning
syntax-rules. It's available online at:

    http://www.scheme.com/tspl3/

You want Chapter 3 and maybe also Chapter 8. There is now a 4th edition of
the book, but it covers R6RS Scheme; I think the 3rd edition is more
applicable to Chicken.


> Also, I have heard that, different from Lisp, macro programming in Scheme
> is not recommended. Is it true?
>

I wouldn't put it that way, but what I have always heard is that you
shouldn't use a macro when a procedure will work.

HTH.

--
Matt Gushee
_______________________________________________
Chicken-users mailing list
Chicken-users@nongnu.org
https://lists.nongnu.org/mailman/listinfo/chicken-users

Reply via email to