From 2a15815cf7f3cd2dd87b82bf9dc54e372b206a0d Mon Sep 17 00:00:00 2001 From: Greg Hendershott Date: Thu, 25 Oct 2012 15:15:06 -0400 Subject: [PATCH 1/5] Add README and COPYRIGHT files to project. --- COPYRIGHT | 1 + README.md | 16 ++++++++++++++++ 2 files changed, 17 insertions(+) create mode 100644 COPYRIGHT create mode 100644 README.md diff --git a/COPYRIGHT b/COPYRIGHT new file mode 100644 index 0000000..da2cd78 --- /dev/null +++ b/COPYRIGHT @@ -0,0 +1 @@ +Copyright (c) 2012 by Greg Hendershott. All rights reserved. diff --git a/README.md b/README.md new file mode 100644 index 0000000..2ae6dec --- /dev/null +++ b/README.md @@ -0,0 +1,16 @@ +# Fear of Macros + +## What it is + +This is a rough draft of a practical guide to Racket macros. + +I started to write it not because I understand macros very well, but +because I don't. + +## Where to read it + +To read: http://www.greghendershott.com/fear-of-macros + +## Feeback + +Feedback is welcome; please use Issues page here on GitHub. From efa9d1ce88a344a905508d34789865ae728c800f Mon Sep 17 00:00:00 2001 From: Greg Hendershott Date: Thu, 25 Oct 2012 15:19:09 -0400 Subject: [PATCH 2/5] Update readme with image link. --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 2ae6dec..aece4e9 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -# Fear of Macros +![Fear of Macros](https://www.greghendershott.com/fear-of-macros/fear-of-macros.jpg "") ## What it is From a8b608a445305cd2e891433702ca7e483368f014 Mon Sep 17 00:00:00 2001 From: Greg Hendershott Date: Thu, 25 Oct 2012 15:20:39 -0400 Subject: [PATCH 3/5] Fix image link. --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index aece4e9..06abf42 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -![Fear of Macros](https://www.greghendershott.com/fear-of-macros/fear-of-macros.jpg "") +![Fear of Macros](http://www.greghendershott.com/fear-of-macros/fear-of-macros.jpg "") ## What it is From 29e261729cb38cca18dccf346b7f87c7205588e4 Mon Sep 17 00:00:00 2001 From: Greg Hendershott Date: Thu, 25 Oct 2012 15:32:52 -0400 Subject: [PATCH 4/5] Add feedback links. --- index.html | 14 ++++++++------ main.rkt | 8 ++++++-- 2 files changed, 14 insertions(+), 8 deletions(-) diff --git a/index.html b/index.html index 2fff09c..9d0d78a 100644 --- a/index.html +++ b/index.html @@ -1,8 +1,8 @@ -Fear of Macros

Fear of Macros

Greg Hendershott

+Fear of Macros

Fear of Macros

Copyright (c) 2012 by Greg Hendershott. All rights reserved. -
Last updated 2012-10-25 14:43:08

1 Introduction

I learned Racket after 25 years of doing C/C++ imperative programming.

Some psychic whiplash resulted.

"All the parentheses" was actually not a big deal. Instead, the first +

Last updated 2012-10-25 15:30:29

1 Introduction

I learned Racket after 25 years of doing C/C++ imperative programming.

Some psychic whiplash resulted.

"All the parentheses" was actually not a big deal. Instead, the first mind warp was functional programming. Before long I wrapped my brain around it, and went on to become comfortable and effective with many other aspects and features of Racket.

But two final frontiers remained: Macros and continuations.

I found that simple macros were easy and understandable, plus there @@ -12,7 +12,9 @@ terminology soup. I marinaded myself in material, hoping it would eventually sink in after enough re-readings. I even found myself using trial and error, rather than having a clear mental model what was going on. Gah.

I’m starting to write this at the point where the shapes are slowly -emerging from the fog.

My primary motive is selfish. Explaining something forces me to learn +emerging from the fog.

If you have any corrections, criticisms, complaints, or whatever, +please +let me know.

My primary motive is selfish. Explaining something forces me to learn it more thoroughly. Plus I expect that if I write something with mistakes, other people will be eager to point them out and correct me. Is that a social-engineering variation of meta-programming? Next @@ -167,9 +169,9 @@ it, it didn’t work. It seems that foo-bar didn’t get defined.

prefer to work in Emacs (like I do), in a situation like this it’s worth firing up DrRacket temporarily to use the Macro Stepper.

It shows us:

(module anonymous-module racket
  (#%module-begin
   (define-syntax (hyphen-define/wrong1.1 stx)
     (syntax-case stx ()
       [(_ a b (args ...) body0 body ...)
        (let ([name (string->symbol (format "~a-~a" #'a #'b))])
          #'(define (name args ...) body0 body ...))]))
   (define (name) #t)))

It shows that we’re expanding to (define (name) #t), but we wanted to expand to (define (foo-bar) #t).

So the problem is we’re getting name when we wanted its -value, foo-bar.

> (define-syntax (hyphen-define/wrong1.2 stx)
    (syntax-case stx ()
      [(_ a b (args ...) body0 body ...)
       (let ([name (string->symbol (format "~a-~a" #'a #'b))])
         #'(define (name args ...)
             body0 body ...))]))
> (hyphen-define/wrong1.2 foo bar () #t)
> (foo-bar)

foo-bar: undefined;

 cannot reference an identifier before its definition

  in module: 'program

The thing to reach for here is with-syntax. This will say -that name is in effect another pattern variable, and to use -its value:

> (define-syntax (hyphen-define/wrong1.3 stx)
    (syntax-case stx ()
      [(_ a b (args ...) body0 body ...)
       (with-syntax ([name (datum->syntax stx
                                          (string->symbol (format "~a-~a"
                                                                  #'a
                                                                  #'b)))])
         #'(define (name args ...)
             body0 body ...))]))
> (hyphen-define/wrong1.3 foo bar () #t)
> (foo-bar)

foo-bar: undefined;

 cannot reference an identifier before its definition

  in module: 'program

Hmm. foo-bar still not defined. Back to the Macro Stepper. It says we’re expanding to:

(define (|#<syntax:11:24foo>-#<syntax:11:28 bar>|) #t).

Ah, that’s right. #'a and #'b are syntax +value, foo-bar.

The thing to reach for here is with-syntax. This will say +that name is in effect another pattern variable, the value of +which we want to use in our main output template.

> (define-syntax (hyphen-define/wrong1.3 stx)
    (syntax-case stx ()
      [(_ a b (args ...) body0 body ...)
       (with-syntax ([name (datum->syntax stx
                                          (string->symbol (format "~a-~a"
                                                                  #'a
                                                                  #'b)))])
         #'(define (name args ...)
             body0 body ...))]))
> (hyphen-define/wrong1.3 foo bar () #t)
> (foo-bar)

foo-bar: undefined;

 cannot reference an identifier before its definition

  in module: 'program

Hmm. foo-bar still not defined. Back to the Macro Stepper. It says we’re expanding to:

(define (|#<syntax:11:24foo>-#<syntax:11:28 bar>|) #t).

Ah, that’s right. #'a and #'b are syntax objects. format is printing a representation of them as syntax objects. What we want is the datum inside the syntax object, the symbols foo and bar. So we should use diff --git a/main.rkt b/main.rkt index 88c8659..4757097 100644 --- a/main.rkt +++ b/main.rkt @@ -16,14 +16,14 @@ @image["fear-of-macros.jpg"] @title[#:version ""]{Fear of Macros} -@author{Greg Hendershott} +@author[@hyperlink["https://github.com/greghendershott/fear-of-macros/issues" + "Greg Hendershott"]] @smaller{Copyright (c) 2012 by Greg Hendershott. All rights reserved.} @para[@smaller["Last updated " (parameterize ([date-display-format 'iso-8601]) (date->string (current-date) #t))]] @table-of-contents{} - @; ---------------------------------------------------------------------------- @section{Introduction} @@ -50,6 +50,10 @@ going on. Gah. I'm starting to write this at the point where the shapes are slowly emerging from the fog. +@margin-note{If you have any corrections, criticisms, complaints, or whatever, +@hyperlink["https://github.com/greghendershott/fear-of-macros/issues" "please +let me know"].} + My primary motive is selfish. Explaining something forces me to learn it more thoroughly. Plus I expect that if I write something with mistakes, other people will be eager to point them out and correct From 6e0c918e4de43eb31fd5190240a4360ea03947ad Mon Sep 17 00:00:00 2001 From: Greg Hendershott Date: Thu, 25 Oct 2012 15:35:19 -0400 Subject: [PATCH 5/5] Update image. --- fear-of-macros.jpg | Bin 20127 -> 20537 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/fear-of-macros.jpg b/fear-of-macros.jpg index ce003b665c5119121b041d3d83d77520c84eae0b..ae46d2ac250c26e2cd7c7d5eaf6f85e3f974dd1d 100644 GIT binary patch delta 16713 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 delta 16310 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