may the lisp be with you - nerd2nerdwhy lisp? more on macros [ what lisp?, how lisp?...

39
Why Lisp? More on Macros [ What Lisp?, How Lisp? ] Problems/Features [ When Lisp? ] May the LISP be with You Andrew (kqb) Easton nerd2nerd: nerdend #cn4n April 30, 2016

Upload: others

Post on 31-May-2020

52 views

Category:

Documents


1 download

TRANSCRIPT

Page 1: May the LISP be with You - Nerd2NerdWhy Lisp? More on Macros [ What Lisp?, How Lisp? ]Problems/Features [ When Lisp? ] May the LISP be with You Andrew (kqb) Easton nerd2nerd: nerdend

Why Lisp? More on Macros [ What Lisp?, How Lisp? ] Problems/Features [ When Lisp? ]

May the LISP be with You

Andrew (kqb) Easton

nerd2nerd: nerdend #cn4n

April 30, 2016

Page 2: May the LISP be with You - Nerd2NerdWhy Lisp? More on Macros [ What Lisp?, How Lisp? ]Problems/Features [ When Lisp? ] May the LISP be with You Andrew (kqb) Easton nerd2nerd: nerdend

Why Lisp? More on Macros [ What Lisp?, How Lisp? ] Problems/Features [ When Lisp? ]

Thank You

• JK

• NaN

Page 3: May the LISP be with You - Nerd2NerdWhy Lisp? More on Macros [ What Lisp?, How Lisp? ]Problems/Features [ When Lisp? ] May the LISP be with You Andrew (kqb) Easton nerd2nerd: nerdend

Why Lisp? More on Macros [ What Lisp?, How Lisp? ] Problems/Features [ When Lisp? ]

Why Lisp?C/C++

RuntimeCompiletime

ClojureLisp IntroductionRuntime and Compiletime

More on Macros [ What Lisp?, How Lisp? ]List Templates == AST TemplatesAn AST PatternTo ∞ and Beyond...

Problems/Features [ When Lisp? ]

Page 4: May the LISP be with You - Nerd2NerdWhy Lisp? More on Macros [ What Lisp?, How Lisp? ]Problems/Features [ When Lisp? ] May the LISP be with You Andrew (kqb) Easton nerd2nerd: nerdend

Why Lisp? More on Macros [ What Lisp?, How Lisp? ] Problems/Features [ When Lisp? ]

Our Example: Factorial

n ∈ N (alternatively: Natural n;)

0! := 1n! := n · (n − 1)!

on the call stack:n!→ n · (n − 1) · (n − 2) · (n − 3) · . . . · 2 · 1

Page 5: May the LISP be with You - Nerd2NerdWhy Lisp? More on Macros [ What Lisp?, How Lisp? ]Problems/Features [ When Lisp? ] May the LISP be with You Andrew (kqb) Easton nerd2nerd: nerdend

Why Lisp? More on Macros [ What Lisp?, How Lisp? ] Problems/Features [ When Lisp? ]

Table of Contents

Why Lisp?C/C++

RuntimeCompiletime

ClojureLisp IntroductionRuntime and Compiletime

More on Macros [ What Lisp?, How Lisp? ]List Templates == AST TemplatesAn AST PatternTo ∞ and Beyond...

Problems/Features [ When Lisp? ]

Page 6: May the LISP be with You - Nerd2NerdWhy Lisp? More on Macros [ What Lisp?, How Lisp? ]Problems/Features [ When Lisp? ] May the LISP be with You Andrew (kqb) Easton nerd2nerd: nerdend

Why Lisp? More on Macros [ What Lisp?, How Lisp? ] Problems/Features [ When Lisp? ]

Runtime C/C++

1 i n t f a c t o r i a l ( i n t n ){2 i f ( n == 0) {3 re tu rn 1 ;4 }5 e l s e {6 re tu rn n ∗ f a c t o r i a l ( n − 1 ) ;7 }8 }9

10 i n t f a c4 = f a c t o r i a l ( 4 ) ;

Page 7: May the LISP be with You - Nerd2NerdWhy Lisp? More on Macros [ What Lisp?, How Lisp? ]Problems/Features [ When Lisp? ] May the LISP be with You Andrew (kqb) Easton nerd2nerd: nerdend

Why Lisp? More on Macros [ What Lisp?, How Lisp? ] Problems/Features [ When Lisp? ]

Compiletime C

1 #def ine FAC0 12 #def ine FAC1 13 #def ine FAC2 24 #def ine FAC3 65 #def ine FAC(X) FAC##X6 #def ine FAC(X) FAC(X)7

8 i n t f a c3 = FAC(3) // => 69 i n t f a c4 = FAC(4) // => E r r o r

Page 8: May the LISP be with You - Nerd2NerdWhy Lisp? More on Macros [ What Lisp?, How Lisp? ]Problems/Features [ When Lisp? ] May the LISP be with You Andrew (kqb) Easton nerd2nerd: nerdend

Why Lisp? More on Macros [ What Lisp?, How Lisp? ] Problems/Features [ When Lisp? ]

Compiletime C++ (Function Templates)

1 template<i n t n> constexpr i n t f a c ( ) {2 re tu rn n∗ fac<n−1>();3 }4

5 template<> constexpr i n t fac <0>() {6 re tu rn 1 ;7 }8

9 constexpr i n t f a c4 = fac <4>();

Page 9: May the LISP be with You - Nerd2NerdWhy Lisp? More on Macros [ What Lisp?, How Lisp? ]Problems/Features [ When Lisp? ] May the LISP be with You Andrew (kqb) Easton nerd2nerd: nerdend

Why Lisp? More on Macros [ What Lisp?, How Lisp? ] Problems/Features [ When Lisp? ]

Table of Contents

Why Lisp?C/C++

RuntimeCompiletime

ClojureLisp IntroductionRuntime and Compiletime

More on Macros [ What Lisp?, How Lisp? ]List Templates == AST TemplatesAn AST PatternTo ∞ and Beyond...

Problems/Features [ When Lisp? ]

Page 10: May the LISP be with You - Nerd2NerdWhy Lisp? More on Macros [ What Lisp?, How Lisp? ]Problems/Features [ When Lisp? ] May the LISP be with You Andrew (kqb) Easton nerd2nerd: nerdend

Why Lisp? More on Macros [ What Lisp?, How Lisp? ] Problems/Features [ When Lisp? ]

Lisp Syntax

1 + 2 + 3 ; h && i && k ; f ( x , y ) ;

+

1 2 3

and

h i k

f

x y

(+ 1 2 3) (and h i k ) ( f x y )

+[1 2 3 ] and [ h i k ] f [ x y ]

Page 11: May the LISP be with You - Nerd2NerdWhy Lisp? More on Macros [ What Lisp?, How Lisp? ]Problems/Features [ When Lisp? ] May the LISP be with You Andrew (kqb) Easton nerd2nerd: nerdend

Why Lisp? More on Macros [ What Lisp?, How Lisp? ] Problems/Features [ When Lisp? ]

Lisp Syntax

1 + 2 + 3 ; h && i && k ; f ( x , y ) ;

+

1 2 3

and

h i k

f

x y

(+ 1 2 3) (and h i k ) ( f x y )

+[1 2 3 ] and [ h i k ] f [ x y ]

Page 12: May the LISP be with You - Nerd2NerdWhy Lisp? More on Macros [ What Lisp?, How Lisp? ]Problems/Features [ When Lisp? ] May the LISP be with You Andrew (kqb) Easton nerd2nerd: nerdend

Why Lisp? More on Macros [ What Lisp?, How Lisp? ] Problems/Features [ When Lisp? ]

Lisp Syntax

1 + 2 + 3 ; h && i && k ; f ( x , y ) ;

+

1 2 3

and

h i k

f

x y

(+ 1 2 3) (and h i k ) ( f x y )

+[1 2 3 ] and [ h i k ] f [ x y ]

Page 13: May the LISP be with You - Nerd2NerdWhy Lisp? More on Macros [ What Lisp?, How Lisp? ]Problems/Features [ When Lisp? ] May the LISP be with You Andrew (kqb) Easton nerd2nerd: nerdend

Why Lisp? More on Macros [ What Lisp?, How Lisp? ] Problems/Features [ When Lisp? ]

Lisp Syntax

1 ( l e t [ x 5 ]2 x ) ; => 53

4 ( l e t [ x 5 ]5 ( quote x ) ) ; => x6

7 ( l e t [ x 5 ]8 ’ x ) ; => x9

10 ( l e t [ x 5 , y 6 ]11 ( l i s t x y ) ) ; => (5 6)12

13 ( l e t [ x 5 , y 6 ]14 ( l i s t ’ x y ) ) ; => ( x 6)

Page 14: May the LISP be with You - Nerd2NerdWhy Lisp? More on Macros [ What Lisp?, How Lisp? ]Problems/Features [ When Lisp? ] May the LISP be with You Andrew (kqb) Easton nerd2nerd: nerdend

Why Lisp? More on Macros [ What Lisp?, How Lisp? ] Problems/Features [ When Lisp? ]

Runtime and Compiletime

1 ( de fn f a c t o r i a l [ n ]2 ( i f (= n 0)3 14 (∗ n ( f a c t o r i a l (− n 1 ) ) ) ) )

5 ( defmacro c t− f a c t o r i a l [ n ]6 ( f a c t o r i a l n ) )

7 ( f a c t o r i a l 4)8 ( c t− f a c t o r i a l 4)

Page 15: May the LISP be with You - Nerd2NerdWhy Lisp? More on Macros [ What Lisp?, How Lisp? ]Problems/Features [ When Lisp? ] May the LISP be with You Andrew (kqb) Easton nerd2nerd: nerdend

Why Lisp? More on Macros [ What Lisp?, How Lisp? ] Problems/Features [ When Lisp? ]

Runtime and Compiletime

1 ( de fn f a c t o r i a l [ n ]2 ( i f (= n 0)3 14 (∗ n ( f a c t o r i a l (− n 1 ) ) ) ) )

5 ( defmacro c t− f a c t o r i a l [ n ]6 ( f a c t o r i a l n ) )

7 ( f a c t o r i a l 4)8 ( c t− f a c t o r i a l 4)

Page 16: May the LISP be with You - Nerd2NerdWhy Lisp? More on Macros [ What Lisp?, How Lisp? ]Problems/Features [ When Lisp? ] May the LISP be with You Andrew (kqb) Easton nerd2nerd: nerdend

Why Lisp? More on Macros [ What Lisp?, How Lisp? ] Problems/Features [ When Lisp? ]

Runtime and Compiletime

1 ( de fn f a c t o r i a l [ n ]2 ( i f (= n 0)3 14 (∗ n ( f a c t o r i a l (− n 1 ) ) ) ) )

5 ( defmacro c t− f a c t o r i a l [ n ]6 ( f a c t o r i a l n ) )

7 ( f a c t o r i a l 4)8 ( c t− f a c t o r i a l 4)

Page 17: May the LISP be with You - Nerd2NerdWhy Lisp? More on Macros [ What Lisp?, How Lisp? ]Problems/Features [ When Lisp? ] May the LISP be with You Andrew (kqb) Easton nerd2nerd: nerdend

Why Lisp? More on Macros [ What Lisp?, How Lisp? ] Problems/Features [ When Lisp? ]

Table of Contents

Why Lisp?C/C++

RuntimeCompiletime

ClojureLisp IntroductionRuntime and Compiletime

More on Macros [ What Lisp?, How Lisp? ]List Templates == AST TemplatesAn AST PatternTo ∞ and Beyond...

Problems/Features [ When Lisp? ]

Page 18: May the LISP be with You - Nerd2NerdWhy Lisp? More on Macros [ What Lisp?, How Lisp? ]Problems/Features [ When Lisp? ] May the LISP be with You Andrew (kqb) Easton nerd2nerd: nerdend

Why Lisp? More on Macros [ What Lisp?, How Lisp? ] Problems/Features [ When Lisp? ]

Lisp Template Syntax

1 ( l e t [ a r g s ( l i s t x y ) ]2

3 ; ; ; Au f r u f4 ( f a r g s ) ; => ( f ( quote ( x y ) ) )5

6 ; ; ; Templates / Schab lonen7 ( b a c k t i c k / t emp la t e8 ( f a r g s ) ) ; => ( quote ( f a r g s ) )9

10 ( b a c k t i c k / t emp la t e11 ( f ˜ a r g s ) ) ; => ( quote ( f ( x y ) ) )12

13 ( b a c k t i c k / t emp la t e14 ( f ˜@args ) ) ; => ( quote ( f x y ) )15

16 )

Page 19: May the LISP be with You - Nerd2NerdWhy Lisp? More on Macros [ What Lisp?, How Lisp? ]Problems/Features [ When Lisp? ] May the LISP be with You Andrew (kqb) Easton nerd2nerd: nerdend

Why Lisp? More on Macros [ What Lisp?, How Lisp? ] Problems/Features [ When Lisp? ]

Table of Contents

Why Lisp?C/C++

RuntimeCompiletime

ClojureLisp IntroductionRuntime and Compiletime

More on Macros [ What Lisp?, How Lisp? ]List Templates == AST TemplatesAn AST PatternTo ∞ and Beyond...

Problems/Features [ When Lisp? ]

Page 20: May the LISP be with You - Nerd2NerdWhy Lisp? More on Macros [ What Lisp?, How Lisp? ]Problems/Features [ When Lisp? ] May the LISP be with You Andrew (kqb) Easton nerd2nerd: nerdend

Why Lisp? More on Macros [ What Lisp?, How Lisp? ] Problems/Features [ When Lisp? ]

An AST Pattern

1 ( de fn f a c t o r i a l [ n ]2 ( i f (= n 0)3 14 (∗ n ( f a c t o r i a l (− n 1 ) ) ) ) )

5 ( defmacro c t− f a c t o r i a l [ n ]6 ( f a c t o r i a l n ) )

Page 21: May the LISP be with You - Nerd2NerdWhy Lisp? More on Macros [ What Lisp?, How Lisp? ]Problems/Features [ When Lisp? ] May the LISP be with You Andrew (kqb) Easton nerd2nerd: nerdend

Why Lisp? More on Macros [ What Lisp?, How Lisp? ] Problems/Features [ When Lisp? ]

Onward to Macros

1 ( de fn f a c t o r i a l [ n ]2 ( i f (= n 0)3 14 (∗ n ( f a c t o r i a l (− n 1 ) ) ) ) )

1 ( b a c k t i c k / temp la t e2 ( de fn ˜ i d e n t i f i e r ˜ a r g l i s t3 ˜@body ) )

Page 22: May the LISP be with You - Nerd2NerdWhy Lisp? More on Macros [ What Lisp?, How Lisp? ]Problems/Features [ When Lisp? ] May the LISP be with You Andrew (kqb) Easton nerd2nerd: nerdend

Why Lisp? More on Macros [ What Lisp?, How Lisp? ] Problems/Features [ When Lisp? ]

Onward to Macros

1 ( de fn f a c t o r i a l [ n ]2 ( i f (= n 0)3 14 (∗ n ( f a c t o r i a l (− n 1 ) ) ) ) )

1 ( b a c k t i c k / temp la t e2 ( de fn ˜ i d e n t i f i e r ˜ a r g l i s t3 ˜@body ) )

Page 23: May the LISP be with You - Nerd2NerdWhy Lisp? More on Macros [ What Lisp?, How Lisp? ]Problems/Features [ When Lisp? ] May the LISP be with You Andrew (kqb) Easton nerd2nerd: nerdend

Why Lisp? More on Macros [ What Lisp?, How Lisp? ] Problems/Features [ When Lisp? ]

Onward to Macros

1 ( defmacro c t− f a c t o r i a l [ n ]2 ( f a c t o r i a l n ) )

1 ( b a c k t i c k / temp la t e2 ( defmacro ˜( symbol ( s t r ”ct−” i d e n t i f i e r ) ) ˜ a r g l i s t3 (˜ i d e n t i f i e r ˜ @ a r g l i s t ) ) )

Page 24: May the LISP be with You - Nerd2NerdWhy Lisp? More on Macros [ What Lisp?, How Lisp? ]Problems/Features [ When Lisp? ] May the LISP be with You Andrew (kqb) Easton nerd2nerd: nerdend

Why Lisp? More on Macros [ What Lisp?, How Lisp? ] Problems/Features [ When Lisp? ]

Onward to Macros

1 ( defmacro c t− f a c t o r i a l [ n ]2 ( f a c t o r i a l n ) )

1 ( b a c k t i c k / temp la t e2 ( defmacro ˜( symbol ( s t r ”ct−” i d e n t i f i e r ) ) ˜ a r g l i s t3 (˜ i d e n t i f i e r ˜ @ a r g l i s t ) ) )

Page 25: May the LISP be with You - Nerd2NerdWhy Lisp? More on Macros [ What Lisp?, How Lisp? ]Problems/Features [ When Lisp? ] May the LISP be with You Andrew (kqb) Easton nerd2nerd: nerdend

Why Lisp? More on Macros [ What Lisp?, How Lisp? ] Problems/Features [ When Lisp? ]

Onward to Macros

1 ; ; w r i t e once , use anywhere2 ( defmacro d e f r t c t [ i d e n t i f i e r a r g l i s t & body ]3 ( b a c k t i c k / t emp la t e4 (do5 ( de fn ˜ i d e n t i f i e r ˜ a r g l i s t6 ˜@body )7

8 ( defmacro ˜( symbol ( s t r ”ct−” i d e n t i f i e r ) ) ˜ a r g l i s t9 (˜ i d e n t i f i e r ˜ @ a r g l i s t ) ) ) ) )

1 ( d e f r t c t f a c t o r i a l [ n ]2 ( i f (= n 0)3 14 (∗ n ( f a c t o r i a l (− n 1 ) ) ) ) )

Page 26: May the LISP be with You - Nerd2NerdWhy Lisp? More on Macros [ What Lisp?, How Lisp? ]Problems/Features [ When Lisp? ] May the LISP be with You Andrew (kqb) Easton nerd2nerd: nerdend

Why Lisp? More on Macros [ What Lisp?, How Lisp? ] Problems/Features [ When Lisp? ]

Onward to Macros

1 ; ; w r i t e once , use anywhere2 ( defmacro d e f r t c t [ i d e n t i f i e r a r g l i s t & body ]3 ( b a c k t i c k / t emp la t e4 (do5 ( de fn ˜ i d e n t i f i e r ˜ a r g l i s t6 ˜@body )7

8 ( defmacro ˜( symbol ( s t r ”ct−” i d e n t i f i e r ) ) ˜ a r g l i s t9 (˜ i d e n t i f i e r ˜ @ a r g l i s t ) ) ) ) )

1 ( d e f r t c t f a c t o r i a l [ n ]2 ( i f (= n 0)3 14 (∗ n ( f a c t o r i a l (− n 1 ) ) ) ) )

Page 27: May the LISP be with You - Nerd2NerdWhy Lisp? More on Macros [ What Lisp?, How Lisp? ]Problems/Features [ When Lisp? ] May the LISP be with You Andrew (kqb) Easton nerd2nerd: nerdend

Why Lisp? More on Macros [ What Lisp?, How Lisp? ] Problems/Features [ When Lisp? ]

Onward to Macros

1 ( de fn f a c t o r i a l [ n ]2 ( i f (= n 0)3 14 (∗ n ( f a c t o r i a l (− n 1 ) ) ) ) )

5 ( defmacro c t− f a c t o r i a l [ n ]6 ( f a c t o r i a l n ) )

1 ( d e f r t c t f a c t o r i a l [ n ]2 ( i f (= n 0)3 14 (∗ n ( f a c t o r i a l (− n 1 ) ) ) ) )

Page 28: May the LISP be with You - Nerd2NerdWhy Lisp? More on Macros [ What Lisp?, How Lisp? ]Problems/Features [ When Lisp? ] May the LISP be with You Andrew (kqb) Easton nerd2nerd: nerdend

Why Lisp? More on Macros [ What Lisp?, How Lisp? ] Problems/Features [ When Lisp? ]

Onward to Macros

1 ( de fn f a c t o r i a l [ n ]2 ( i f (= n 0)3 14 (∗ n ( f a c t o r i a l (− n 1 ) ) ) ) )

5 ( defmacro c t− f a c t o r i a l [ n ]6 ( f a c t o r i a l n ) )

1 ( d e f r t c t f a c t o r i a l [ n ]2 ( i f (= n 0)3 14 (∗ n ( f a c t o r i a l (− n 1 ) ) ) ) )

Page 29: May the LISP be with You - Nerd2NerdWhy Lisp? More on Macros [ What Lisp?, How Lisp? ]Problems/Features [ When Lisp? ] May the LISP be with You Andrew (kqb) Easton nerd2nerd: nerdend

Why Lisp? More on Macros [ What Lisp?, How Lisp? ] Problems/Features [ When Lisp? ]

Onward to Macros

1 ( de fn f a c t o r i a l [ n ]2 ( i f (= n 0)3 14 (∗ n ( f a c t o r i a l (− n 1 ) ) ) ) )

5 ( defmacro c t− f a c t o r i a l [ n ]6 ( f a c t o r i a l n ) )

1 ( d e f r t c t f a c t o r i a l [ n ]2 ( i f (= n 0)3 14 (∗ n ( f a c t o r i a l (− n 1 ) ) ) ) )

Page 30: May the LISP be with You - Nerd2NerdWhy Lisp? More on Macros [ What Lisp?, How Lisp? ]Problems/Features [ When Lisp? ] May the LISP be with You Andrew (kqb) Easton nerd2nerd: nerdend

Why Lisp? More on Macros [ What Lisp?, How Lisp? ] Problems/Features [ When Lisp? ]

Onward to Macros

1 ( d e f r t c t f a c t o r i a l [ n ]2 ( i f (= n 0)3 14 (∗ n ( f a c t o r i a l (− n 1 ) ) ) ) )

1 ( f a c t o r i a l 4)2 ( c t− f a c t o r i a l 4)

Page 31: May the LISP be with You - Nerd2NerdWhy Lisp? More on Macros [ What Lisp?, How Lisp? ]Problems/Features [ When Lisp? ] May the LISP be with You Andrew (kqb) Easton nerd2nerd: nerdend

Why Lisp? More on Macros [ What Lisp?, How Lisp? ] Problems/Features [ When Lisp? ]

Onward to Macros

1 ( d e f r t c t f a c t o r i a l [ n ]2 ( i f (= n 0)3 14 (∗ n ( f a c t o r i a l (− n 1 ) ) ) ) )

1 ( f a c t o r i a l 4)2 ( c t− f a c t o r i a l 4)

Page 32: May the LISP be with You - Nerd2NerdWhy Lisp? More on Macros [ What Lisp?, How Lisp? ]Problems/Features [ When Lisp? ] May the LISP be with You Andrew (kqb) Easton nerd2nerd: nerdend

Why Lisp? More on Macros [ What Lisp?, How Lisp? ] Problems/Features [ When Lisp? ]

Revised: Runtime and Compiletime

1 ( de fn r t− f a c t o r i a l [ n ]2 ( i f (= n 0)3 14 (∗ n ( r t− f a c t o r i a l (− n 1 ) ) ) ) )

5 ( defmacro f a c t o r i a l [ n ]6 ( l e t [ x ( t r y ( eva l n ) ( ca tch Excep t i on e n i l ) ) ]7 ; ; ’ number? ==> f a i l e a r l y on f l o a t i n g po i n t8 ( i f ( number? x )9 ( r t− f a c t o r i a l x )

10 ( b a c k t i c k / temp la t e11 ( r t− f a c t o r i a l ˜n ) ) ) ) )12

13 ; ; ==> w r i t e once , use anywhere , anyt ime

Page 33: May the LISP be with You - Nerd2NerdWhy Lisp? More on Macros [ What Lisp?, How Lisp? ]Problems/Features [ When Lisp? ] May the LISP be with You Andrew (kqb) Easton nerd2nerd: nerdend

Why Lisp? More on Macros [ What Lisp?, How Lisp? ] Problems/Features [ When Lisp? ]

Revised: Runtime and Compiletime

1 ( de fn r t− f a c t o r i a l [ n ]2 ( i f (= n 0)3 14 (∗ n ( r t− f a c t o r i a l (− n 1 ) ) ) ) )

5 ( defmacro f a c t o r i a l [ n ]6 ( l e t [ x ( t r y ( eva l n ) ( ca tch Excep t i on e n i l ) ) ]7 ; ; ’ number? ==> f a i l e a r l y on f l o a t i n g po i n t8 ( i f ( number? x )9 ( r t− f a c t o r i a l x )

10 ( b a c k t i c k / temp la t e11 ( r t− f a c t o r i a l ˜n ) ) ) ) )12

13 ; ; ==> w r i t e once , use anywhere , anyt ime

Page 34: May the LISP be with You - Nerd2NerdWhy Lisp? More on Macros [ What Lisp?, How Lisp? ]Problems/Features [ When Lisp? ] May the LISP be with You Andrew (kqb) Easton nerd2nerd: nerdend

Why Lisp? More on Macros [ What Lisp?, How Lisp? ] Problems/Features [ When Lisp? ]

Table of Contents

Why Lisp?C/C++

RuntimeCompiletime

ClojureLisp IntroductionRuntime and Compiletime

More on Macros [ What Lisp?, How Lisp? ]List Templates == AST TemplatesAn AST PatternTo ∞ and Beyond...

Problems/Features [ When Lisp? ]

Page 35: May the LISP be with You - Nerd2NerdWhy Lisp? More on Macros [ What Lisp?, How Lisp? ]Problems/Features [ When Lisp? ] May the LISP be with You Andrew (kqb) Easton nerd2nerd: nerdend

Why Lisp? More on Macros [ What Lisp?, How Lisp? ] Problems/Features [ When Lisp? ]

To ∞ and Beyond: Learning Lisp for Free

• ”Logic, Math, Structure”• Haskell B. Curry: U-Language

• Common Lisp• Peter Seibel: Practical Common Lisp• Edmund Weitz: Common Lisp Recipes (only 1

2 free)• LispWorks: the Common Lisp HyperSpec• Toronto Lisp User Group: Learn Lisp the Hard Way

• Macro Programming (Common Lisp)

1. Paul Graham: On Lisp2. Doug Hoyte: Let over Lambda (only 1

2 free)

• Clojure• Daniel Higginbotham: Clojure for the Brave and True• build tool: leiningen, boot-clj

Page 36: May the LISP be with You - Nerd2NerdWhy Lisp? More on Macros [ What Lisp?, How Lisp? ]Problems/Features [ When Lisp? ] May the LISP be with You Andrew (kqb) Easton nerd2nerd: nerdend

Why Lisp? More on Macros [ What Lisp?, How Lisp? ] Problems/Features [ When Lisp? ]

To ∞ and Beyond: Learning Lisp for Free

• ”Logic, Math, Structure”• Haskell B. Curry: U-Language

• Common Lisp• Peter Seibel: Practical Common Lisp• Edmund Weitz: Common Lisp Recipes (only 1

2 free)• LispWorks: the Common Lisp HyperSpec• Toronto Lisp User Group: Learn Lisp the Hard Way

• Macro Programming (Common Lisp)

1. Paul Graham: On Lisp2. Doug Hoyte: Let over Lambda (only 1

2 free)

• Clojure• Daniel Higginbotham: Clojure for the Brave and True• build tool: leiningen, boot-clj

Page 37: May the LISP be with You - Nerd2NerdWhy Lisp? More on Macros [ What Lisp?, How Lisp? ]Problems/Features [ When Lisp? ] May the LISP be with You Andrew (kqb) Easton nerd2nerd: nerdend

Why Lisp? More on Macros [ What Lisp?, How Lisp? ] Problems/Features [ When Lisp? ]

To ∞ and Beyond: Learning Lisp for Free

• ”Logic, Math, Structure”• Haskell B. Curry: U-Language

• Common Lisp• Peter Seibel: Practical Common Lisp• Edmund Weitz: Common Lisp Recipes (only 1

2 free)• LispWorks: the Common Lisp HyperSpec• Toronto Lisp User Group: Learn Lisp the Hard Way

• Macro Programming (Common Lisp)

1. Paul Graham: On Lisp2. Doug Hoyte: Let over Lambda (only 1

2 free)

• Clojure• Daniel Higginbotham: Clojure for the Brave and True• build tool: leiningen, boot-clj

Page 38: May the LISP be with You - Nerd2NerdWhy Lisp? More on Macros [ What Lisp?, How Lisp? ]Problems/Features [ When Lisp? ] May the LISP be with You Andrew (kqb) Easton nerd2nerd: nerdend

Why Lisp? More on Macros [ What Lisp?, How Lisp? ] Problems/Features [ When Lisp? ]

To ∞ and Beyond: Learning Lisp for Free

• ”Logic, Math, Structure”• Haskell B. Curry: U-Language

• Common Lisp• Peter Seibel: Practical Common Lisp• Edmund Weitz: Common Lisp Recipes (only 1

2 free)• LispWorks: the Common Lisp HyperSpec• Toronto Lisp User Group: Learn Lisp the Hard Way

• Macro Programming (Common Lisp)

1. Paul Graham: On Lisp2. Doug Hoyte: Let over Lambda (only 1

2 free)

• Clojure• Daniel Higginbotham: Clojure for the Brave and True• build tool: leiningen, boot-clj

Page 39: May the LISP be with You - Nerd2NerdWhy Lisp? More on Macros [ What Lisp?, How Lisp? ]Problems/Features [ When Lisp? ] May the LISP be with You Andrew (kqb) Easton nerd2nerd: nerdend

Why Lisp? More on Macros [ What Lisp?, How Lisp? ] Problems/Features [ When Lisp? ]

To ∞ and Beyond: Learning Lisp for Free

• Worse is Better

• The Lisp Curse

• The Bipolar Lisp Programmer(offline since approx. 2016-02)