SlideShare a Scribd company logo
1 of 34
Download to read offline
Lisp
                            Tijs van der Storm




Thursday, September 6, 12
About me...
                    • Work at Centrum Wiskunde & Informatica
                    • Teach at Universiteit van Amsterdam in the
                            Master Software Engineering
                    • According to @jvandenbos “typical esoteric
                            programming language dude” :)
                    • Contact: storm@cwi.nl, @tvdstorm

Thursday, September 6, 12
Interests and projects

                    • DSLs, MDD, programming, languages
                    • Co-designer of the Rascal
                            metaprogramming language
                    • Co-designer of the Ensō model-based
                            programming environment



Thursday, September 6, 12
Atze van der Ploeg




Thursday, September 6, 12
Today

                    • About Lisp
                    • Programming Clojure
                    • ... meta-programming



Thursday, September 6, 12
http://lambda.bugyo.tk/cdr/mwl/

Thursday, September 6, 12
What is Lisp?
                                                                    http://lisperati.com/
                    •       A programming language?
                    •       For LIst Processing?
                    •       The most intelligent way to misuse a computer?
                    •       Lots of Irritating Superfluous Parentheses?
                    •       Secret alien technology?
                    •       Oatmeal with fingernail clippings mixed in?
                    •       A programmer amplifier?


Thursday, September 6, 12
What is Lisp?

                    • A PL for building organisms (Perlis)
                    • Building material (Kay)
                    • Opposite of a Blub language (Graham)
                    • Maxwell’s equations of software (Kay)
                    • The greatest language ever invented (Kay)

Thursday, September 6, 12
John McCarthy




                                            (September 4, 1927 –
                                            October 24, 2011)

Thursday, September 6, 12
(




              Recursive Functions of Symbolic Expressions and
                   Their Computation by Machine, Part I
                              JOHX MCCAaTItY, Massachusetts Institute of Technology, Cambridge, Mass.


      1.   Introduction                                                2. F u n c t i o n s a n d F u n c t i o n Definitions
         A programming system called LISP (for lASt Processor)            We shMl need a number of mathematical ideas ar:d
      has been developed for the I B M 704 computer by the             notations concerning functions in general. Most of the
      Artificial Intelligence group at M.I.T. The system was           ideas are well known, but the notion of conditional e,~pre~'-
      designed to facilitate experiments with a proposed system        sion is believed to be new, and ihe use of conditional
      called the Advice Taker, whereby a machine could be              expressions permits functions to be defined recursively in a
      instructed to handle declarative as well as imperative           new and convenient way.
      sentences and could exhibit "common sense" in carrying              a. Partial Functions. A partial function is a funct on
      out its instructions. The original proposal It] for the Advice   that is defined only on part of its domain. Partial funetio:~s
      Taker was made in November 1958. The main require-               necessarily arise when functions are defined by eomputa~
      ment was a programming system for manipulating ex-               tions because for some values of the arguments t:he Pomp:>
      pressions representing formalized declarative and irnpera-       ration defining the value of the function may not ter-
      live sentences so that the Advice Taker system could make        minate. However, some of our elementary functions wilt be
      deductions.                                                      defined as partial functions.
         In the course of its development the Lisp system went
                                                                          b. Propositional Expres.s'ions and Predicates. A t)ropo~i-
      through several stages of simplification and eventually
                                                                       tionM expression is an expression whose possible values
      came to be based on a scheme for representing the partial
                                                                       are T (for truth) and F (for falsity). We shall assume
      recursive functions of a certain class of symbolic expres-
                                                                       that the reader is fanfiliar with the propositionM eom~ee-
      sions. This representation is independent of the IBM 704
                                                                       lives A ("and"), V ( " o r " ) , and ~ ( " n o t " ) , Typieai
      computer, or of any other electronic computer, and it now
                                                                       propositional expressions are:
      seems expedient to expound the system by starting with
      the class of expressions called S-expressions and the func-                              x<y
      tions called S-functions.
                                                                                              (x < y) A (b = e)
         In this article, we first describe a formalism for defining
      functions reeursively. We believe this formalism has ad-                                 x is prime
      vantages both as a programming language and as vehicle           A predicate is a function whose range consists of ih{:
      for developing a theory of computation. Next, we describe        truth values T and F.
      S-expressions and S-functions, give some examples, and
                                                                         e. Conditional Expressions. The dependence of truth
      then describe the universM S-function apply which plays
                                                                       values on the vahtes of quantities of other kinds is ex-
      the theoretical role of a universal Turing machine and
                                                                       pressed in mathematics by predicates, and the depende~ee
      the practical role of an interpreter. Then we describe the
                                                                       of truth values on other truth values by logical comxee-
      representation of S-expressions in the memmT of the
                                                                       ~ives. However, the notations for expressing symbol (alE"
      IBM 704 by list structures similar to those used by Newell,      the dependence of quantities of other kinds on trutt~
      Shaw and Simon [2], and the representation of S-functions        vMues is inadequate, so that English words and phrases
      by program. Then we mention the main features of the             are generMly used for expressing these depende~tces i:~
      Lisp programming system for the IBM 704. Next comes              texts that, describe other dependences symbolically. I!'<~r
      another way of describing computations with symbolic             example, the function Ix I is ustmlly defined in words.
      expressions, and finally we give a recursive function in-           Conditional expressions are a deviee for expressing the
      terpretation of flow charts.                                     dependence of quantities on propositional quantities. :
         We hope to describe some of the sylnbolie computations        conditional expression has the form
           Communications of the ACM, vol 3, issue 4, April 1960
      for which LISP has been used in another paper, and also to
      give elsewhere some applications of our reeursive function
                                                                                           (p: -+ el,    -.-   , p ~ --+ e , , )   http://dx.doi.org/10.1145/367177.367199
      formalism to mathematical logic and to the problem of            where the p's are propositionM expressions and the e's are
      mechanical theorem proving.                                      expressions of any kind. It may be read, "If p~ thexx <,
Thursday, September 6, 12
Last 17th of
                                                            August: 50 years
                                                                ago (!)




  http://www.softwarepreservation.org/projects/LISP/book/LISP%201.5%20Programmers%20Manual.pdf
Thursday, September 6, 12
The famous
                             page 13




                             http://xkcd.com/917/

Thursday, September 6, 12
Guy L. Steele, Richard P. Gabriel, “The evolution of Lisp”, in: History of programming languages II, ACM 1996, p. 311


Thursday, September 6, 12
Revised5 Report on the Algorithmic Language
                                    Scheme
                                      RICHARD   KELSEY, WILLIAM CLINGER, AND JONATHAN REES (Editors)
                         H. ABELSON             R. K. DYBVIG             C. T. HAYNES           G. J. ROZAS
                         N. I. ADAMS IV         D. P. FRIEDMAN           E. KOHLBECKER          G. L. STEELE JR.
                         D. H. BARTLEY          R. HALSTEAD              D. OXLEY               G. J. SUSSMAN
                         G. BROOKS              C. HANSON                K. M. PITMAN           M. WAND


                                                     Dedicated to the Memory of Robert Hieb

                                20 February 1998                                                     CONTENTS
                                                                           Introduction . . . . . . . . . . . . . . . . . . . . .     .   .   .   .   .   .   .    2


                                                                                                                                                                        50 pages:
                                  SUMMARY                                  1 Overview of Scheme . . . . . . . . . . . . . . . .       .   .   .   .   .   .   .    3
                                                                               1.1 Semantics . . . . . . . . . . . . . . . . . .      .   .   .   .   .   .   .    3
             The report gives a defining description of the program-            1.2 Syntax . . . . . . . . . . . . . . . . . . . .     .   .   .   .   .   .   .    3
             ming language Scheme. Scheme is a statically scoped and           1.3 Notation and terminology . . . . . . . . .         .   .   .   .   .   .   .    3



                                                                                                                                                                       pure, small,
             properly tail-recursive dialect of the Lisp programming       2 Lexical conventions . . . . . . . . . . . . . . . .      .   .   .   .   .   .   .    5
             language invented by Guy Lewis Steele Jr. and Gerald              2.1 Identifiers . . . . . . . . . . . . . . . . . .     .   .   .   .   .   .   .    5
             Jay Sussman. It was designed to have an exceptionally             2.2 Whitespace and comments . . . . . . . . .          .   .   .   .   .   .   .    5
             clear and simple semantics and few di↵erent ways to form          2.3 Other notations . . . . . . . . . . . . . . .      .   .   .   .   .   .   .    5



                                                                                                                                                                       “academic”
                                                                           3 Basic concepts . . . . . . . . . . . . . . . . . . .     .   .   .   .   .   .   .    6
             expressions. A wide variety of programming paradigms, in-
                                                                               3.1 Variables, syntactic keywords, and regions         .   .   .   .   .   .   .    6
             cluding imperative, functional, and message passing styles,
                                                                               3.2 Disjointness of types . . . . . . . . . . . .      .   .   .   .   .   .   .    6
             find convenient expression in Scheme.                              3.3 External representations . . . . . . . . . .       .   .   .   .   .   .   .    6
             The introduction o↵ers a brief history of the language and        3.4 Storage model . . . . . . . . . . . . . . . .      .   .   .   .   .   .   .    7
             of the report.                                                    3.5 Proper tail recursion . . . . . . . . . . . .      .   .   .   .   .   .   .    7
                                                                           4 Expressions . . . . . . . . . . . . . . . . . . . .      .   .   .   .   .   .   .    8
             The first three chapters present the fundamental ideas of          4.1 Primitive expression types . . . . . . . . .       .   .   .   .   .   .   .    8
             the language and describe the notational conventions used         4.2 Derived expression types . . . . . . . . . .       .   .   .   .   .   .   .   10
             for describing the language and for writing programs in the       4.3 Macros . . . . . . . . . . . . . . . . . . . .     .   .   .   .   .   .   .   13
             language.                                                     5 Program structure . . . . . . . . . . . . . . . . .      .   .   .   .   .   .   .   16
                                                                               5.1 Programs . . . . . . . . . . . . . . . . . .       .   .   .   .   .   .   .   16
             Chapters 4 and 5 describe the syntax and semantics of             5.2 Definitions . . . . . . . . . . . . . . . . . .     .   .   .   .   .   .   .   16
             expressions, programs, and definitions.                            5.3 Syntax definitions . . . . . . . . . . . . .        .   .   .   .   .   .   .   17
             Chapter 6 describes Scheme’s built-in procedures, which       6 Standard procedures . . . . . . . . . . . . . . .        .   .   .   .   .   .   .   17
             include all of the language’s data manipulation and in-           6.1 Equivalence predicates . . . . . . . . . . .       .   .   .   .   .   .   .   17
                                                                               6.2 Numbers . . . . . . . . . . . . . . . . . . .      .   .   .   .   .   .   .   19
             put/output primitives.
                                                                               6.3 Other data types . . . . . . . . . . . . . .       .   .   .   .   .   .   .   25
             Chapter 7 provides a formal syntax for Scheme written in          6.4 Control features . . . . . . . . . . . . . . .     .   .   .   .   .   .   .   31
             extended BNF, along with a formal denotational semantics.         6.5 Eval . . . . . . . . . . . . . . . . . . . . .     .   .   .   .   .   .   .   35
             An example of the use of the language follows the formal          6.6 Input and output . . . . . . . . . . . . . .       .   .   .   .   .   .   .   35
             syntax and semantics.                                         7 Formal syntax and semantics . . . . . . . . . . .        .   .   .   .   .   .   .   38
                                                                               7.1 Formal syntax . . . . . . . . . . . . . . . .      .   .   .   .   .   .   .   38
             The report concludes with a list of references and an al-         7.2 Formal semantics . . . . . . . . . . . . . .       .   .   .   .   .   .   .   40
             phabetic index.                                                   7.3 Derived expression types . . . . . . . . . .       .   .   .   .   .   .   .   43
                                                                           Notes . . . . . . . . . . . . . . . . . . . . . . . . .    .   .   .   .   .   .   .   45
                                                                           Additional material . . . . . . . . . . . . . . . . .      .   .   .   .   .   .   .   45
                                                                           Example . . . . . . . . . . . . . . . . . . . . . . . .    .   .   .   .   .   .   .   45
                                                                           References . . . . . . . . . . . . . . . . . . . . . . .   .   .   .   .   .   .   .   46
                                                                           Alphabetic index of definitions of concepts,
                                                                                   keywords, and procedures . . . . . . . . .         . . . . . . .               48




Thursday, September 6, 12
1029 pages:
                            comprehensive, practical,
                               messy, “industrial”




Thursday, September 6, 12
What made Lisp different?




                            http://paulgraham.com/diff.html

Thursday, September 6, 12
How is Lisp still different?
                    • Homoiconic syntax
                     • aka: there is no syntax
                    • Macros
                     • aka: compile-time code transformers
                    • Code is data, data can be code
                    • Program into the language
Thursday, September 6, 12
http://xkcd.com/224/


Thursday, September 6, 12
Thursday, September 6, 12
Fun resources




Thursday, September 6, 12
http://xkcd.com/297/


Thursday, September 6, 12
Rich Hickey




Thursday, September 6, 12
• Lisp syntax, macros, code as data etc.
                    • Functional programming, immutable data
                    • Data structures: map, set, vector, list
                    • Concurrency: transactional memory
                    • Compiles to JVM, intergrates with Java
                    • [and much more]
Thursday, September 6, 12
(def basic-data-types
             '{:booleans [true, false]
               :numbers [1, 2, 3.0, 4/5]
               :strings ["this is a string"]
               :symbols [a, empty?, +, user/foo]
               :keywords [:a-key-word]})


                                     NB: commas, are
                                      whitespace (!)
Thursday, September 6, 12
(def collection-types
                      '{:vectors [1,2,3,4]
                        :maps     {:x 3, :y 4}
                        :sets     #{a set of symbols}
                        :lists    (a list of symbols)})




Thursday, September 6, 12
• Expressed using lists (Polish notation):
                            (operator arg1 arg2 ...)

                    • Head is applied to the arguments in tail:
                            (+ 1 2)




Thursday, September 6, 12
Special forms
             define          (def x 3)


     conditional            (if (> x 1) 'then 'else)

                            (do
     sequencing               (print "hello")
                              (print "world!"))

      local vars            (let [x 1] (+ x 1))

                            (quote (this returns a list with seven symbols))
       quotation            '(this returns a list with seven symbols)

          closures          (fn [x n] (+ x n))




Thursday, September 6, 12
Convenience macros
                   define a       (defn power [x n]
                   function        (if (= n 0)
                                     1
                                     (* x (power x (- n 1)))))




                    define a       (defmacro unless [cond then else]
                     macro          `(if (not ~cond) ~then ~else))




Thursday, September 6, 12
Macros!
                    • Functions that transform code trees
                    • aka: code that writes code
                template       (defmacro unless [cond then else]
                                 `(if (not ~cond) ~then ~else))



                            quasi quote `         unquote ~



Thursday, September 6, 12
Trying it in the REPL
           => (defmacro unless [cond then else]
                `(if (not ~cond) ~then ~else))
           #'user/unless

           => (unless (> 2 3) 'yes 'no)
           yes

           => (macroexpand '(unless (> 2 3) 'yes 'no))
           (if (clojure.core/not (> 2 3)) (quote yes) (quote no))

           => (macroexpand '(unless (> 2 3) (+ 1 2) (* 2 3)))
           (if (clojure.core/not (> 2 3)) (+ 1 2) (* 2 3))




Thursday, September 6, 12
Cascading conditionals
    (cond' [(> x y) 1]
           [(< x y) -1]
           [(= x y) 0]))
                                                         rest params
                            (defmacro cond' [case & cases]
                              (if (empty? cases)
                                `(when ~(first case)           splicing
                                   ~(second case))           unquote ~@
                                `(if ~(first case)
                                   ~(second case)
              macro                (cond' ~(first cases) ~@(rest cases)))))
            recursion


Thursday, September 6, 12
Testing it out
                       => ((fn [x y] (cond'
                                       [(> x y) 1]
                                       [(< x y) -1]
                                       [(= x y) 0])) 1 2)
                       -1

                       => (macroexpand-all '(cond'
                                              [(> x   y) 1]
                                              [(< x   y) -1]
                                              [(= x   y) 0]))
                       (if (> x y) 1 (if (< x y) -1   (if (= x y) (do 0))))




Thursday, September 6, 12
Why is this cool?
                    • Extend the language with new abstractions
                     • control-flow
                     • state machine
                     • GUI builders
                     • grammars, ... etc.
                    • Reuse Lisp syntax / compile with macros
Thursday, September 6, 12
s




                            http://www.cwi.nl/~storm/devclj.html

Thursday, September 6, 12

More Related Content

What's hot

Advance LISP (Artificial Intelligence)
Advance LISP (Artificial Intelligence) Advance LISP (Artificial Intelligence)
Advance LISP (Artificial Intelligence) wahab khan
 
Lisp Programming Languge
Lisp Programming LangugeLisp Programming Languge
Lisp Programming LangugeYaser Jaradeh
 
Introduction To Lisp
Introduction To LispIntroduction To Lisp
Introduction To Lispkyleburton
 
Lisp for Python Programmers
Lisp for Python ProgrammersLisp for Python Programmers
Lisp for Python ProgrammersVsevolod Dyomkin
 
Real World Haskell: Lecture 7
Real World Haskell: Lecture 7Real World Haskell: Lecture 7
Real World Haskell: Lecture 7Bryan O'Sullivan
 
Logic Programming and Prolog
Logic Programming and PrologLogic Programming and Prolog
Logic Programming and PrologSadegh Dorri N.
 
BayFP: Concurrent and Multicore Haskell
BayFP: Concurrent and Multicore HaskellBayFP: Concurrent and Multicore Haskell
BayFP: Concurrent and Multicore HaskellBryan O'Sullivan
 
Real World Haskell: Lecture 1
Real World Haskell: Lecture 1Real World Haskell: Lecture 1
Real World Haskell: Lecture 1Bryan O'Sullivan
 
DEFUN 2008 - Real World Haskell
DEFUN 2008 - Real World HaskellDEFUN 2008 - Real World Haskell
DEFUN 2008 - Real World HaskellBryan O'Sullivan
 
Scheme Programming Language
Scheme Programming LanguageScheme Programming Language
Scheme Programming LanguageReham AlBlehid
 
Introduction to Python Part-1
Introduction to Python Part-1Introduction to Python Part-1
Introduction to Python Part-1Devashish Kumar
 
Introduction to Functional Languages
Introduction to Functional LanguagesIntroduction to Functional Languages
Introduction to Functional Languagessuthi
 

What's hot (20)

Lisp
LispLisp
Lisp
 
Advance LISP (Artificial Intelligence)
Advance LISP (Artificial Intelligence) Advance LISP (Artificial Intelligence)
Advance LISP (Artificial Intelligence)
 
Lisp Programming Languge
Lisp Programming LangugeLisp Programming Languge
Lisp Programming Languge
 
Introduction To Lisp
Introduction To LispIntroduction To Lisp
Introduction To Lisp
 
Basic lisp
Basic lispBasic lisp
Basic lisp
 
(Ai lisp)
(Ai lisp)(Ai lisp)
(Ai lisp)
 
LISP: Data types in lisp
LISP: Data types in lispLISP: Data types in lisp
LISP: Data types in lisp
 
LISP: Input And Output
LISP: Input And OutputLISP: Input And Output
LISP: Input And Output
 
Lisp for Python Programmers
Lisp for Python ProgrammersLisp for Python Programmers
Lisp for Python Programmers
 
LISP: Introduction to lisp
LISP: Introduction to lispLISP: Introduction to lisp
LISP: Introduction to lisp
 
Real World Haskell: Lecture 7
Real World Haskell: Lecture 7Real World Haskell: Lecture 7
Real World Haskell: Lecture 7
 
Logic Programming and Prolog
Logic Programming and PrologLogic Programming and Prolog
Logic Programming and Prolog
 
BayFP: Concurrent and Multicore Haskell
BayFP: Concurrent and Multicore HaskellBayFP: Concurrent and Multicore Haskell
BayFP: Concurrent and Multicore Haskell
 
Real World Haskell: Lecture 1
Real World Haskell: Lecture 1Real World Haskell: Lecture 1
Real World Haskell: Lecture 1
 
DEFUN 2008 - Real World Haskell
DEFUN 2008 - Real World HaskellDEFUN 2008 - Real World Haskell
DEFUN 2008 - Real World Haskell
 
Scheme Programming Language
Scheme Programming LanguageScheme Programming Language
Scheme Programming Language
 
Introduction to Python Part-1
Introduction to Python Part-1Introduction to Python Part-1
Introduction to Python Part-1
 
Knowledge Extraction
Knowledge ExtractionKnowledge Extraction
Knowledge Extraction
 
Introduction to Functional Languages
Introduction to Functional LanguagesIntroduction to Functional Languages
Introduction to Functional Languages
 
Lisp and scheme i
Lisp and scheme iLisp and scheme i
Lisp and scheme i
 

Viewers also liked

LISP Programming Language (Artificial Intelligence)
LISP Programming Language (Artificial Intelligence)LISP Programming Language (Artificial Intelligence)
LISP Programming Language (Artificial Intelligence)wahab khan
 
Artificial intelligence Prolog Language
Artificial intelligence Prolog LanguageArtificial intelligence Prolog Language
Artificial intelligence Prolog LanguageREHMAT ULLAH
 
Lecture 3 basic syntax and semantics
Lecture 3  basic syntax and semanticsLecture 3  basic syntax and semantics
Lecture 3 basic syntax and semanticsalvin567
 
Redesigning Common Lisp
Redesigning Common LispRedesigning Common Lisp
Redesigning Common Lispfukamachi
 
Digital image processing
Digital image processingDigital image processing
Digital image processingDeevena Dayaal
 
Image processing1 introduction
Image processing1 introductionImage processing1 introduction
Image processing1 introductionPreeti Gupta
 
Digital Image Processing: An Introduction
Digital Image Processing: An IntroductionDigital Image Processing: An Introduction
Digital Image Processing: An IntroductionMostafa G. M. Mostafa
 
Introduccion a los lenguajes de programacion para Inteligencia Artificial
Introduccion a los lenguajes de programacion para Inteligencia ArtificialIntroduccion a los lenguajes de programacion para Inteligencia Artificial
Introduccion a los lenguajes de programacion para Inteligencia ArtificialBrian Pando
 
Proyecto Areas Inteligencia Artificial Javier Garcia
Proyecto Areas Inteligencia Artificial Javier GarciaProyecto Areas Inteligencia Artificial Javier Garcia
Proyecto Areas Inteligencia Artificial Javier GarciaJavier García García
 
Syntax and semantics
Syntax and semanticsSyntax and semantics
Syntax and semanticsRushdi Shams
 
Digital Image Processing
Digital Image ProcessingDigital Image Processing
Digital Image ProcessingReshma KC
 
Expert systems
Expert systemsExpert systems
Expert systemsJithin Zcs
 
Digital image processing
Digital image processingDigital image processing
Digital image processingAvisek Roy
 
Application of expert system
Application of expert systemApplication of expert system
Application of expert systemDinkar DP
 
Introduction and architecture of expert system
Introduction  and architecture of expert systemIntroduction  and architecture of expert system
Introduction and architecture of expert systempremdeshmane
 

Viewers also liked (20)

LISP Programming Language (Artificial Intelligence)
LISP Programming Language (Artificial Intelligence)LISP Programming Language (Artificial Intelligence)
LISP Programming Language (Artificial Intelligence)
 
Artificial intelligence Prolog Language
Artificial intelligence Prolog LanguageArtificial intelligence Prolog Language
Artificial intelligence Prolog Language
 
Prolog basics
Prolog basicsProlog basics
Prolog basics
 
Heroku
HerokuHeroku
Heroku
 
Lecture 3 basic syntax and semantics
Lecture 3  basic syntax and semanticsLecture 3  basic syntax and semantics
Lecture 3 basic syntax and semantics
 
02-Unidad 1 Generalidades de la Inteligencia Artificial
02-Unidad 1 Generalidades de la Inteligencia Artificial02-Unidad 1 Generalidades de la Inteligencia Artificial
02-Unidad 1 Generalidades de la Inteligencia Artificial
 
Redesigning Common Lisp
Redesigning Common LispRedesigning Common Lisp
Redesigning Common Lisp
 
Digital image processing
Digital image processingDigital image processing
Digital image processing
 
Lisp
LispLisp
Lisp
 
Image processing1 introduction
Image processing1 introductionImage processing1 introduction
Image processing1 introduction
 
Digital Image Processing: An Introduction
Digital Image Processing: An IntroductionDigital Image Processing: An Introduction
Digital Image Processing: An Introduction
 
Introduccion a los lenguajes de programacion para Inteligencia Artificial
Introduccion a los lenguajes de programacion para Inteligencia ArtificialIntroduccion a los lenguajes de programacion para Inteligencia Artificial
Introduccion a los lenguajes de programacion para Inteligencia Artificial
 
Proyecto Areas Inteligencia Artificial Javier Garcia
Proyecto Areas Inteligencia Artificial Javier GarciaProyecto Areas Inteligencia Artificial Javier Garcia
Proyecto Areas Inteligencia Artificial Javier Garcia
 
Syntax and semantics
Syntax and semanticsSyntax and semantics
Syntax and semantics
 
Digital Image Processing
Digital Image ProcessingDigital Image Processing
Digital Image Processing
 
Expert systems
Expert systemsExpert systems
Expert systems
 
Digital image processing
Digital image processingDigital image processing
Digital image processing
 
History of programming
History of programmingHistory of programming
History of programming
 
Application of expert system
Application of expert systemApplication of expert system
Application of expert system
 
Introduction and architecture of expert system
Introduction  and architecture of expert systemIntroduction  and architecture of expert system
Introduction and architecture of expert system
 

Similar to Learn a language : LISP

Programing paradigm &amp; implementation
Programing paradigm &amp; implementationPrograming paradigm &amp; implementation
Programing paradigm &amp; implementationBilal Maqbool ツ
 
Can functional programming be liberated from static typing?
Can functional programming be liberated from static typing?Can functional programming be liberated from static typing?
Can functional programming be liberated from static typing?Vsevolod Dyomkin
 
Intellectual technologies
Intellectual technologiesIntellectual technologies
Intellectual technologiesPolad Saruxanov
 
The Rise of Dynamic Languages
The Rise of Dynamic LanguagesThe Rise of Dynamic Languages
The Rise of Dynamic Languagesgreenwop
 
R Journal 2009 1 Chambers
R Journal 2009 1  ChambersR Journal 2009 1  Chambers
R Journal 2009 1 ChambersAjay Ohri
 
[Ris cy business]
[Ris cy business][Ris cy business]
[Ris cy business]Dino, llc
 
PL Lecture 01 - preliminaries
PL Lecture 01 - preliminariesPL Lecture 01 - preliminaries
PL Lecture 01 - preliminariesSchwannden Kuo
 
JRuby, Not Just For Hard-Headed Pragmatists Anymore
JRuby, Not Just For Hard-Headed Pragmatists AnymoreJRuby, Not Just For Hard-Headed Pragmatists Anymore
JRuby, Not Just For Hard-Headed Pragmatists AnymoreErin Dees
 
Антон Кириллов, ZeptoLab
Антон Кириллов, ZeptoLabАнтон Кириллов, ZeptoLab
Антон Кириллов, ZeptoLabDiana Dymolazova
 
On being a professional software developer
On being a professional software developerOn being a professional software developer
On being a professional software developerAnton Kirillov
 
Oop by edgar lagman jr
Oop by edgar lagman jr Oop by edgar lagman jr
Oop by edgar lagman jr Jun-jun Lagman
 
Deep Learning for Machine Translation: a paradigm shift - Alberto Massidda - ...
Deep Learning for Machine Translation: a paradigm shift - Alberto Massidda - ...Deep Learning for Machine Translation: a paradigm shift - Alberto Massidda - ...
Deep Learning for Machine Translation: a paradigm shift - Alberto Massidda - ...Codemotion
 
Standardizing arrays -- Microsoft Presentation
Standardizing arrays -- Microsoft PresentationStandardizing arrays -- Microsoft Presentation
Standardizing arrays -- Microsoft PresentationTravis Oliphant
 
LISP: назад в будущее, Микола Мозговий
LISP: назад в будущее, Микола МозговийLISP: назад в будущее, Микола Мозговий
LISP: назад в будущее, Микола МозговийSigma Software
 
summer training report on python
summer training report on pythonsummer training report on python
summer training report on pythonShubham Yadav
 

Similar to Learn a language : LISP (20)

Programing paradigm &amp; implementation
Programing paradigm &amp; implementationPrograming paradigm &amp; implementation
Programing paradigm &amp; implementation
 
Can functional programming be liberated from static typing?
Can functional programming be liberated from static typing?Can functional programming be liberated from static typing?
Can functional programming be liberated from static typing?
 
Intellectual technologies
Intellectual technologiesIntellectual technologies
Intellectual technologies
 
The Rise of Dynamic Languages
The Rise of Dynamic LanguagesThe Rise of Dynamic Languages
The Rise of Dynamic Languages
 
R Journal 2009 1 Chambers
R Journal 2009 1  ChambersR Journal 2009 1  Chambers
R Journal 2009 1 Chambers
 
[Ris cy business]
[Ris cy business][Ris cy business]
[Ris cy business]
 
Programming for Problem Solving
Programming for Problem SolvingProgramming for Problem Solving
Programming for Problem Solving
 
Paradigms
ParadigmsParadigms
Paradigms
 
PL Lecture 01 - preliminaries
PL Lecture 01 - preliminariesPL Lecture 01 - preliminaries
PL Lecture 01 - preliminaries
 
JRuby, Not Just For Hard-Headed Pragmatists Anymore
JRuby, Not Just For Hard-Headed Pragmatists AnymoreJRuby, Not Just For Hard-Headed Pragmatists Anymore
JRuby, Not Just For Hard-Headed Pragmatists Anymore
 
Evolution of Programming Languages.pdf
Evolution of Programming Languages.pdfEvolution of Programming Languages.pdf
Evolution of Programming Languages.pdf
 
Evolution of Programming Languages.pdf
Evolution of Programming Languages.pdfEvolution of Programming Languages.pdf
Evolution of Programming Languages.pdf
 
Антон Кириллов, ZeptoLab
Антон Кириллов, ZeptoLabАнтон Кириллов, ZeptoLab
Антон Кириллов, ZeptoLab
 
On being a professional software developer
On being a professional software developerOn being a professional software developer
On being a professional software developer
 
Oop by edgar lagman jr
Oop by edgar lagman jr Oop by edgar lagman jr
Oop by edgar lagman jr
 
Deep Learning for Machine Translation: a paradigm shift - Alberto Massidda - ...
Deep Learning for Machine Translation: a paradigm shift - Alberto Massidda - ...Deep Learning for Machine Translation: a paradigm shift - Alberto Massidda - ...
Deep Learning for Machine Translation: a paradigm shift - Alberto Massidda - ...
 
Standardizing arrays -- Microsoft Presentation
Standardizing arrays -- Microsoft PresentationStandardizing arrays -- Microsoft Presentation
Standardizing arrays -- Microsoft Presentation
 
LISP: назад в будущее, Микола Мозговий
LISP: назад в будущее, Микола МозговийLISP: назад в будущее, Микола Мозговий
LISP: назад в будущее, Микола Мозговий
 
summer training report on python
summer training report on pythonsummer training report on python
summer training report on python
 
Plc part 1
Plc part 1Plc part 1
Plc part 1
 

More from Devnology

What do we really know about the differences between static and dynamic types?
What do we really know about the differences between static and dynamic types?What do we really know about the differences between static and dynamic types?
What do we really know about the differences between static and dynamic types?Devnology
 
Meetup at SIG: Meten is weten
Meetup at SIG: Meten is wetenMeetup at SIG: Meten is weten
Meetup at SIG: Meten is wetenDevnology
 
Software Operation Knowledge
Software Operation KnowledgeSoftware Operation Knowledge
Software Operation KnowledgeDevnology
 
Slides Felienne Hermans Symposium EWI
Slides Felienne Hermans Symposium EWISlides Felienne Hermans Symposium EWI
Slides Felienne Hermans Symposium EWIDevnology
 
Devnology auteursrecht en open source 20130205
Devnology auteursrecht en open source 20130205Devnology auteursrecht en open source 20130205
Devnology auteursrecht en open source 20130205Devnology
 
The top 10 security issues in web applications
The top 10 security issues in web applicationsThe top 10 security issues in web applications
The top 10 security issues in web applicationsDevnology
 
Hacking Smartcards & RFID
Hacking Smartcards & RFIDHacking Smartcards & RFID
Hacking Smartcards & RFIDDevnology
 
Learn a language : LISP
Learn a language : LISPLearn a language : LISP
Learn a language : LISPDevnology
 
Devnology Back to School: Empirical Evidence on Modeling in Software Development
Devnology Back to School: Empirical Evidence on Modeling in Software DevelopmentDevnology Back to School: Empirical Evidence on Modeling in Software Development
Devnology Back to School: Empirical Evidence on Modeling in Software DevelopmentDevnology
 
Devnology Back to School IV - Agility en Architectuur
Devnology Back to School IV - Agility en ArchitectuurDevnology Back to School IV - Agility en Architectuur
Devnology Back to School IV - Agility en ArchitectuurDevnology
 
Devnology Back to School III : Software impact
Devnology Back to School III : Software impactDevnology Back to School III : Software impact
Devnology Back to School III : Software impactDevnology
 
Devnology back toschool software reengineering
Devnology back toschool software reengineeringDevnology back toschool software reengineering
Devnology back toschool software reengineeringDevnology
 
Introduction to Software Evolution: The Software Volcano
Introduction to Software Evolution: The Software VolcanoIntroduction to Software Evolution: The Software Volcano
Introduction to Software Evolution: The Software VolcanoDevnology
 
Devnology Workshop Genpro 2 feb 2011
Devnology Workshop Genpro 2 feb 2011Devnology Workshop Genpro 2 feb 2011
Devnology Workshop Genpro 2 feb 2011Devnology
 
Devnology Coding Dojo 05-01-2011
Devnology Coding Dojo 05-01-2011Devnology Coding Dojo 05-01-2011
Devnology Coding Dojo 05-01-2011Devnology
 
Spoofax: ontwikkeling van domeinspecifieke talen in Eclipse
Spoofax: ontwikkeling van domeinspecifieke talen in EclipseSpoofax: ontwikkeling van domeinspecifieke talen in Eclipse
Spoofax: ontwikkeling van domeinspecifieke talen in EclipseDevnology
 
Experimenting with Augmented Reality
Experimenting with Augmented RealityExperimenting with Augmented Reality
Experimenting with Augmented RealityDevnology
 
Unit testing and MVVM in Silverlight
Unit testing and MVVM in SilverlightUnit testing and MVVM in Silverlight
Unit testing and MVVM in SilverlightDevnology
 
mobl: Een DSL voor mobiele applicatieontwikkeling
mobl: Een DSL voor mobiele applicatieontwikkelingmobl: Een DSL voor mobiele applicatieontwikkeling
mobl: Een DSL voor mobiele applicatieontwikkelingDevnology
 
Devnology Fitnesse workshop
Devnology Fitnesse workshopDevnology Fitnesse workshop
Devnology Fitnesse workshopDevnology
 

More from Devnology (20)

What do we really know about the differences between static and dynamic types?
What do we really know about the differences between static and dynamic types?What do we really know about the differences between static and dynamic types?
What do we really know about the differences between static and dynamic types?
 
Meetup at SIG: Meten is weten
Meetup at SIG: Meten is wetenMeetup at SIG: Meten is weten
Meetup at SIG: Meten is weten
 
Software Operation Knowledge
Software Operation KnowledgeSoftware Operation Knowledge
Software Operation Knowledge
 
Slides Felienne Hermans Symposium EWI
Slides Felienne Hermans Symposium EWISlides Felienne Hermans Symposium EWI
Slides Felienne Hermans Symposium EWI
 
Devnology auteursrecht en open source 20130205
Devnology auteursrecht en open source 20130205Devnology auteursrecht en open source 20130205
Devnology auteursrecht en open source 20130205
 
The top 10 security issues in web applications
The top 10 security issues in web applicationsThe top 10 security issues in web applications
The top 10 security issues in web applications
 
Hacking Smartcards & RFID
Hacking Smartcards & RFIDHacking Smartcards & RFID
Hacking Smartcards & RFID
 
Learn a language : LISP
Learn a language : LISPLearn a language : LISP
Learn a language : LISP
 
Devnology Back to School: Empirical Evidence on Modeling in Software Development
Devnology Back to School: Empirical Evidence on Modeling in Software DevelopmentDevnology Back to School: Empirical Evidence on Modeling in Software Development
Devnology Back to School: Empirical Evidence on Modeling in Software Development
 
Devnology Back to School IV - Agility en Architectuur
Devnology Back to School IV - Agility en ArchitectuurDevnology Back to School IV - Agility en Architectuur
Devnology Back to School IV - Agility en Architectuur
 
Devnology Back to School III : Software impact
Devnology Back to School III : Software impactDevnology Back to School III : Software impact
Devnology Back to School III : Software impact
 
Devnology back toschool software reengineering
Devnology back toschool software reengineeringDevnology back toschool software reengineering
Devnology back toschool software reengineering
 
Introduction to Software Evolution: The Software Volcano
Introduction to Software Evolution: The Software VolcanoIntroduction to Software Evolution: The Software Volcano
Introduction to Software Evolution: The Software Volcano
 
Devnology Workshop Genpro 2 feb 2011
Devnology Workshop Genpro 2 feb 2011Devnology Workshop Genpro 2 feb 2011
Devnology Workshop Genpro 2 feb 2011
 
Devnology Coding Dojo 05-01-2011
Devnology Coding Dojo 05-01-2011Devnology Coding Dojo 05-01-2011
Devnology Coding Dojo 05-01-2011
 
Spoofax: ontwikkeling van domeinspecifieke talen in Eclipse
Spoofax: ontwikkeling van domeinspecifieke talen in EclipseSpoofax: ontwikkeling van domeinspecifieke talen in Eclipse
Spoofax: ontwikkeling van domeinspecifieke talen in Eclipse
 
Experimenting with Augmented Reality
Experimenting with Augmented RealityExperimenting with Augmented Reality
Experimenting with Augmented Reality
 
Unit testing and MVVM in Silverlight
Unit testing and MVVM in SilverlightUnit testing and MVVM in Silverlight
Unit testing and MVVM in Silverlight
 
mobl: Een DSL voor mobiele applicatieontwikkeling
mobl: Een DSL voor mobiele applicatieontwikkelingmobl: Een DSL voor mobiele applicatieontwikkeling
mobl: Een DSL voor mobiele applicatieontwikkeling
 
Devnology Fitnesse workshop
Devnology Fitnesse workshopDevnology Fitnesse workshop
Devnology Fitnesse workshop
 

Recently uploaded

Corporate and higher education May webinar.pptx
Corporate and higher education May webinar.pptxCorporate and higher education May webinar.pptx
Corporate and higher education May webinar.pptxRustici Software
 
Platformless Horizons for Digital Adaptability
Platformless Horizons for Digital AdaptabilityPlatformless Horizons for Digital Adaptability
Platformless Horizons for Digital AdaptabilityWSO2
 
DEV meet-up UiPath Document Understanding May 7 2024 Amsterdam
DEV meet-up UiPath Document Understanding May 7 2024 AmsterdamDEV meet-up UiPath Document Understanding May 7 2024 Amsterdam
DEV meet-up UiPath Document Understanding May 7 2024 AmsterdamUiPathCommunity
 
Navigating Identity and Access Management in the Modern Enterprise
Navigating Identity and Access Management in the Modern EnterpriseNavigating Identity and Access Management in the Modern Enterprise
Navigating Identity and Access Management in the Modern EnterpriseWSO2
 
AWS Community Day CPH - Three problems of Terraform
AWS Community Day CPH - Three problems of TerraformAWS Community Day CPH - Three problems of Terraform
AWS Community Day CPH - Three problems of TerraformAndrey Devyatkin
 
CNIC Information System with Pakdata Cf In Pakistan
CNIC Information System with Pakdata Cf In PakistanCNIC Information System with Pakdata Cf In Pakistan
CNIC Information System with Pakdata Cf In Pakistandanishmna97
 
Navigating the Deluge_ Dubai Floods and the Resilience of Dubai International...
Navigating the Deluge_ Dubai Floods and the Resilience of Dubai International...Navigating the Deluge_ Dubai Floods and the Resilience of Dubai International...
Navigating the Deluge_ Dubai Floods and the Resilience of Dubai International...Orbitshub
 
Modernizing Legacy Systems Using Ballerina
Modernizing Legacy Systems Using BallerinaModernizing Legacy Systems Using Ballerina
Modernizing Legacy Systems Using BallerinaWSO2
 
"I see eyes in my soup": How Delivery Hero implemented the safety system for ...
"I see eyes in my soup": How Delivery Hero implemented the safety system for ..."I see eyes in my soup": How Delivery Hero implemented the safety system for ...
"I see eyes in my soup": How Delivery Hero implemented the safety system for ...Zilliz
 
Introduction to Multilingual Retrieval Augmented Generation (RAG)
Introduction to Multilingual Retrieval Augmented Generation (RAG)Introduction to Multilingual Retrieval Augmented Generation (RAG)
Introduction to Multilingual Retrieval Augmented Generation (RAG)Zilliz
 
Rising Above_ Dubai Floods and the Fortitude of Dubai International Airport.pdf
Rising Above_ Dubai Floods and the Fortitude of Dubai International Airport.pdfRising Above_ Dubai Floods and the Fortitude of Dubai International Airport.pdf
Rising Above_ Dubai Floods and the Fortitude of Dubai International Airport.pdfOrbitshub
 
Repurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost Saving
Repurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost SavingRepurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost Saving
Repurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost SavingEdi Saputra
 
TrustArc Webinar - Unlock the Power of AI-Driven Data Discovery
TrustArc Webinar - Unlock the Power of AI-Driven Data DiscoveryTrustArc Webinar - Unlock the Power of AI-Driven Data Discovery
TrustArc Webinar - Unlock the Power of AI-Driven Data DiscoveryTrustArc
 
Polkadot JAM Slides - Token2049 - By Dr. Gavin Wood
Polkadot JAM Slides - Token2049 - By Dr. Gavin WoodPolkadot JAM Slides - Token2049 - By Dr. Gavin Wood
Polkadot JAM Slides - Token2049 - By Dr. Gavin WoodJuan lago vázquez
 
Finding Java's Hidden Performance Traps @ DevoxxUK 2024
Finding Java's Hidden Performance Traps @ DevoxxUK 2024Finding Java's Hidden Performance Traps @ DevoxxUK 2024
Finding Java's Hidden Performance Traps @ DevoxxUK 2024Victor Rentea
 
Elevate Developer Efficiency & build GenAI Application with Amazon Q​
Elevate Developer Efficiency & build GenAI Application with Amazon Q​Elevate Developer Efficiency & build GenAI Application with Amazon Q​
Elevate Developer Efficiency & build GenAI Application with Amazon Q​Bhuvaneswari Subramani
 
Introduction to use of FHIR Documents in ABDM
Introduction to use of FHIR Documents in ABDMIntroduction to use of FHIR Documents in ABDM
Introduction to use of FHIR Documents in ABDMKumar Satyam
 
Why Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire businessWhy Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire businesspanagenda
 
Web Form Automation for Bonterra Impact Management (fka Social Solutions Apri...
Web Form Automation for Bonterra Impact Management (fka Social Solutions Apri...Web Form Automation for Bonterra Impact Management (fka Social Solutions Apri...
Web Form Automation for Bonterra Impact Management (fka Social Solutions Apri...Jeffrey Haguewood
 
[BuildWithAI] Introduction to Gemini.pdf
[BuildWithAI] Introduction to Gemini.pdf[BuildWithAI] Introduction to Gemini.pdf
[BuildWithAI] Introduction to Gemini.pdfSandro Moreira
 

Recently uploaded (20)

Corporate and higher education May webinar.pptx
Corporate and higher education May webinar.pptxCorporate and higher education May webinar.pptx
Corporate and higher education May webinar.pptx
 
Platformless Horizons for Digital Adaptability
Platformless Horizons for Digital AdaptabilityPlatformless Horizons for Digital Adaptability
Platformless Horizons for Digital Adaptability
 
DEV meet-up UiPath Document Understanding May 7 2024 Amsterdam
DEV meet-up UiPath Document Understanding May 7 2024 AmsterdamDEV meet-up UiPath Document Understanding May 7 2024 Amsterdam
DEV meet-up UiPath Document Understanding May 7 2024 Amsterdam
 
Navigating Identity and Access Management in the Modern Enterprise
Navigating Identity and Access Management in the Modern EnterpriseNavigating Identity and Access Management in the Modern Enterprise
Navigating Identity and Access Management in the Modern Enterprise
 
AWS Community Day CPH - Three problems of Terraform
AWS Community Day CPH - Three problems of TerraformAWS Community Day CPH - Three problems of Terraform
AWS Community Day CPH - Three problems of Terraform
 
CNIC Information System with Pakdata Cf In Pakistan
CNIC Information System with Pakdata Cf In PakistanCNIC Information System with Pakdata Cf In Pakistan
CNIC Information System with Pakdata Cf In Pakistan
 
Navigating the Deluge_ Dubai Floods and the Resilience of Dubai International...
Navigating the Deluge_ Dubai Floods and the Resilience of Dubai International...Navigating the Deluge_ Dubai Floods and the Resilience of Dubai International...
Navigating the Deluge_ Dubai Floods and the Resilience of Dubai International...
 
Modernizing Legacy Systems Using Ballerina
Modernizing Legacy Systems Using BallerinaModernizing Legacy Systems Using Ballerina
Modernizing Legacy Systems Using Ballerina
 
"I see eyes in my soup": How Delivery Hero implemented the safety system for ...
"I see eyes in my soup": How Delivery Hero implemented the safety system for ..."I see eyes in my soup": How Delivery Hero implemented the safety system for ...
"I see eyes in my soup": How Delivery Hero implemented the safety system for ...
 
Introduction to Multilingual Retrieval Augmented Generation (RAG)
Introduction to Multilingual Retrieval Augmented Generation (RAG)Introduction to Multilingual Retrieval Augmented Generation (RAG)
Introduction to Multilingual Retrieval Augmented Generation (RAG)
 
Rising Above_ Dubai Floods and the Fortitude of Dubai International Airport.pdf
Rising Above_ Dubai Floods and the Fortitude of Dubai International Airport.pdfRising Above_ Dubai Floods and the Fortitude of Dubai International Airport.pdf
Rising Above_ Dubai Floods and the Fortitude of Dubai International Airport.pdf
 
Repurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost Saving
Repurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost SavingRepurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost Saving
Repurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost Saving
 
TrustArc Webinar - Unlock the Power of AI-Driven Data Discovery
TrustArc Webinar - Unlock the Power of AI-Driven Data DiscoveryTrustArc Webinar - Unlock the Power of AI-Driven Data Discovery
TrustArc Webinar - Unlock the Power of AI-Driven Data Discovery
 
Polkadot JAM Slides - Token2049 - By Dr. Gavin Wood
Polkadot JAM Slides - Token2049 - By Dr. Gavin WoodPolkadot JAM Slides - Token2049 - By Dr. Gavin Wood
Polkadot JAM Slides - Token2049 - By Dr. Gavin Wood
 
Finding Java's Hidden Performance Traps @ DevoxxUK 2024
Finding Java's Hidden Performance Traps @ DevoxxUK 2024Finding Java's Hidden Performance Traps @ DevoxxUK 2024
Finding Java's Hidden Performance Traps @ DevoxxUK 2024
 
Elevate Developer Efficiency & build GenAI Application with Amazon Q​
Elevate Developer Efficiency & build GenAI Application with Amazon Q​Elevate Developer Efficiency & build GenAI Application with Amazon Q​
Elevate Developer Efficiency & build GenAI Application with Amazon Q​
 
Introduction to use of FHIR Documents in ABDM
Introduction to use of FHIR Documents in ABDMIntroduction to use of FHIR Documents in ABDM
Introduction to use of FHIR Documents in ABDM
 
Why Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire businessWhy Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire business
 
Web Form Automation for Bonterra Impact Management (fka Social Solutions Apri...
Web Form Automation for Bonterra Impact Management (fka Social Solutions Apri...Web Form Automation for Bonterra Impact Management (fka Social Solutions Apri...
Web Form Automation for Bonterra Impact Management (fka Social Solutions Apri...
 
[BuildWithAI] Introduction to Gemini.pdf
[BuildWithAI] Introduction to Gemini.pdf[BuildWithAI] Introduction to Gemini.pdf
[BuildWithAI] Introduction to Gemini.pdf
 

Learn a language : LISP

  • 1. Lisp Tijs van der Storm Thursday, September 6, 12
  • 2. About me... • Work at Centrum Wiskunde & Informatica • Teach at Universiteit van Amsterdam in the Master Software Engineering • According to @jvandenbos “typical esoteric programming language dude” :) • Contact: storm@cwi.nl, @tvdstorm Thursday, September 6, 12
  • 3. Interests and projects • DSLs, MDD, programming, languages • Co-designer of the Rascal metaprogramming language • Co-designer of the Ensō model-based programming environment Thursday, September 6, 12
  • 4. Atze van der Ploeg Thursday, September 6, 12
  • 5. Today • About Lisp • Programming Clojure • ... meta-programming Thursday, September 6, 12
  • 7. What is Lisp? http://lisperati.com/ • A programming language? • For LIst Processing? • The most intelligent way to misuse a computer? • Lots of Irritating Superfluous Parentheses? • Secret alien technology? • Oatmeal with fingernail clippings mixed in? • A programmer amplifier? Thursday, September 6, 12
  • 8. What is Lisp? • A PL for building organisms (Perlis) • Building material (Kay) • Opposite of a Blub language (Graham) • Maxwell’s equations of software (Kay) • The greatest language ever invented (Kay) Thursday, September 6, 12
  • 9. John McCarthy (September 4, 1927 – October 24, 2011) Thursday, September 6, 12
  • 10. ( Recursive Functions of Symbolic Expressions and Their Computation by Machine, Part I JOHX MCCAaTItY, Massachusetts Institute of Technology, Cambridge, Mass. 1. Introduction 2. F u n c t i o n s a n d F u n c t i o n Definitions A programming system called LISP (for lASt Processor) We shMl need a number of mathematical ideas ar:d has been developed for the I B M 704 computer by the notations concerning functions in general. Most of the Artificial Intelligence group at M.I.T. The system was ideas are well known, but the notion of conditional e,~pre~'- designed to facilitate experiments with a proposed system sion is believed to be new, and ihe use of conditional called the Advice Taker, whereby a machine could be expressions permits functions to be defined recursively in a instructed to handle declarative as well as imperative new and convenient way. sentences and could exhibit "common sense" in carrying a. Partial Functions. A partial function is a funct on out its instructions. The original proposal It] for the Advice that is defined only on part of its domain. Partial funetio:~s Taker was made in November 1958. The main require- necessarily arise when functions are defined by eomputa~ ment was a programming system for manipulating ex- tions because for some values of the arguments t:he Pomp:> pressions representing formalized declarative and irnpera- ration defining the value of the function may not ter- live sentences so that the Advice Taker system could make minate. However, some of our elementary functions wilt be deductions. defined as partial functions. In the course of its development the Lisp system went b. Propositional Expres.s'ions and Predicates. A t)ropo~i- through several stages of simplification and eventually tionM expression is an expression whose possible values came to be based on a scheme for representing the partial are T (for truth) and F (for falsity). We shall assume recursive functions of a certain class of symbolic expres- that the reader is fanfiliar with the propositionM eom~ee- sions. This representation is independent of the IBM 704 lives A ("and"), V ( " o r " ) , and ~ ( " n o t " ) , Typieai computer, or of any other electronic computer, and it now propositional expressions are: seems expedient to expound the system by starting with the class of expressions called S-expressions and the func- x<y tions called S-functions. (x < y) A (b = e) In this article, we first describe a formalism for defining functions reeursively. We believe this formalism has ad- x is prime vantages both as a programming language and as vehicle A predicate is a function whose range consists of ih{: for developing a theory of computation. Next, we describe truth values T and F. S-expressions and S-functions, give some examples, and e. Conditional Expressions. The dependence of truth then describe the universM S-function apply which plays values on the vahtes of quantities of other kinds is ex- the theoretical role of a universal Turing machine and pressed in mathematics by predicates, and the depende~ee the practical role of an interpreter. Then we describe the of truth values on other truth values by logical comxee- representation of S-expressions in the memmT of the ~ives. However, the notations for expressing symbol (alE" IBM 704 by list structures similar to those used by Newell, the dependence of quantities of other kinds on trutt~ Shaw and Simon [2], and the representation of S-functions vMues is inadequate, so that English words and phrases by program. Then we mention the main features of the are generMly used for expressing these depende~tces i:~ Lisp programming system for the IBM 704. Next comes texts that, describe other dependences symbolically. I!'<~r another way of describing computations with symbolic example, the function Ix I is ustmlly defined in words. expressions, and finally we give a recursive function in- Conditional expressions are a deviee for expressing the terpretation of flow charts. dependence of quantities on propositional quantities. : We hope to describe some of the sylnbolie computations conditional expression has the form Communications of the ACM, vol 3, issue 4, April 1960 for which LISP has been used in another paper, and also to give elsewhere some applications of our reeursive function (p: -+ el, -.- , p ~ --+ e , , ) http://dx.doi.org/10.1145/367177.367199 formalism to mathematical logic and to the problem of where the p's are propositionM expressions and the e's are mechanical theorem proving. expressions of any kind. It may be read, "If p~ thexx <, Thursday, September 6, 12
  • 11. Last 17th of August: 50 years ago (!) http://www.softwarepreservation.org/projects/LISP/book/LISP%201.5%20Programmers%20Manual.pdf Thursday, September 6, 12
  • 12. The famous page 13 http://xkcd.com/917/ Thursday, September 6, 12
  • 13. Guy L. Steele, Richard P. Gabriel, “The evolution of Lisp”, in: History of programming languages II, ACM 1996, p. 311 Thursday, September 6, 12
  • 14. Revised5 Report on the Algorithmic Language Scheme RICHARD KELSEY, WILLIAM CLINGER, AND JONATHAN REES (Editors) H. ABELSON R. K. DYBVIG C. T. HAYNES G. J. ROZAS N. I. ADAMS IV D. P. FRIEDMAN E. KOHLBECKER G. L. STEELE JR. D. H. BARTLEY R. HALSTEAD D. OXLEY G. J. SUSSMAN G. BROOKS C. HANSON K. M. PITMAN M. WAND Dedicated to the Memory of Robert Hieb 20 February 1998 CONTENTS Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2 50 pages: SUMMARY 1 Overview of Scheme . . . . . . . . . . . . . . . . . . . . . . . 3 1.1 Semantics . . . . . . . . . . . . . . . . . . . . . . . . . 3 The report gives a defining description of the program- 1.2 Syntax . . . . . . . . . . . . . . . . . . . . . . . . . . . 3 ming language Scheme. Scheme is a statically scoped and 1.3 Notation and terminology . . . . . . . . . . . . . . . . 3 pure, small, properly tail-recursive dialect of the Lisp programming 2 Lexical conventions . . . . . . . . . . . . . . . . . . . . . . . 5 language invented by Guy Lewis Steele Jr. and Gerald 2.1 Identifiers . . . . . . . . . . . . . . . . . . . . . . . . . 5 Jay Sussman. It was designed to have an exceptionally 2.2 Whitespace and comments . . . . . . . . . . . . . . . . 5 clear and simple semantics and few di↵erent ways to form 2.3 Other notations . . . . . . . . . . . . . . . . . . . . . . 5 “academic” 3 Basic concepts . . . . . . . . . . . . . . . . . . . . . . . . . . 6 expressions. A wide variety of programming paradigms, in- 3.1 Variables, syntactic keywords, and regions . . . . . . . 6 cluding imperative, functional, and message passing styles, 3.2 Disjointness of types . . . . . . . . . . . . . . . . . . . 6 find convenient expression in Scheme. 3.3 External representations . . . . . . . . . . . . . . . . . 6 The introduction o↵ers a brief history of the language and 3.4 Storage model . . . . . . . . . . . . . . . . . . . . . . . 7 of the report. 3.5 Proper tail recursion . . . . . . . . . . . . . . . . . . . 7 4 Expressions . . . . . . . . . . . . . . . . . . . . . . . . . . . 8 The first three chapters present the fundamental ideas of 4.1 Primitive expression types . . . . . . . . . . . . . . . . 8 the language and describe the notational conventions used 4.2 Derived expression types . . . . . . . . . . . . . . . . . 10 for describing the language and for writing programs in the 4.3 Macros . . . . . . . . . . . . . . . . . . . . . . . . . . . 13 language. 5 Program structure . . . . . . . . . . . . . . . . . . . . . . . . 16 5.1 Programs . . . . . . . . . . . . . . . . . . . . . . . . . 16 Chapters 4 and 5 describe the syntax and semantics of 5.2 Definitions . . . . . . . . . . . . . . . . . . . . . . . . . 16 expressions, programs, and definitions. 5.3 Syntax definitions . . . . . . . . . . . . . . . . . . . . 17 Chapter 6 describes Scheme’s built-in procedures, which 6 Standard procedures . . . . . . . . . . . . . . . . . . . . . . 17 include all of the language’s data manipulation and in- 6.1 Equivalence predicates . . . . . . . . . . . . . . . . . . 17 6.2 Numbers . . . . . . . . . . . . . . . . . . . . . . . . . . 19 put/output primitives. 6.3 Other data types . . . . . . . . . . . . . . . . . . . . . 25 Chapter 7 provides a formal syntax for Scheme written in 6.4 Control features . . . . . . . . . . . . . . . . . . . . . . 31 extended BNF, along with a formal denotational semantics. 6.5 Eval . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35 An example of the use of the language follows the formal 6.6 Input and output . . . . . . . . . . . . . . . . . . . . . 35 syntax and semantics. 7 Formal syntax and semantics . . . . . . . . . . . . . . . . . . 38 7.1 Formal syntax . . . . . . . . . . . . . . . . . . . . . . . 38 The report concludes with a list of references and an al- 7.2 Formal semantics . . . . . . . . . . . . . . . . . . . . . 40 phabetic index. 7.3 Derived expression types . . . . . . . . . . . . . . . . . 43 Notes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45 Additional material . . . . . . . . . . . . . . . . . . . . . . . . 45 Example . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45 References . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46 Alphabetic index of definitions of concepts, keywords, and procedures . . . . . . . . . . . . . . . . 48 Thursday, September 6, 12
  • 15. 1029 pages: comprehensive, practical, messy, “industrial” Thursday, September 6, 12
  • 16. What made Lisp different? http://paulgraham.com/diff.html Thursday, September 6, 12
  • 17. How is Lisp still different? • Homoiconic syntax • aka: there is no syntax • Macros • aka: compile-time code transformers • Code is data, data can be code • Program into the language Thursday, September 6, 12
  • 23. • Lisp syntax, macros, code as data etc. • Functional programming, immutable data • Data structures: map, set, vector, list • Concurrency: transactional memory • Compiles to JVM, intergrates with Java • [and much more] Thursday, September 6, 12
  • 24. (def basic-data-types '{:booleans [true, false] :numbers [1, 2, 3.0, 4/5] :strings ["this is a string"] :symbols [a, empty?, +, user/foo] :keywords [:a-key-word]}) NB: commas, are whitespace (!) Thursday, September 6, 12
  • 25. (def collection-types '{:vectors [1,2,3,4] :maps {:x 3, :y 4} :sets #{a set of symbols} :lists (a list of symbols)}) Thursday, September 6, 12
  • 26. • Expressed using lists (Polish notation): (operator arg1 arg2 ...) • Head is applied to the arguments in tail: (+ 1 2) Thursday, September 6, 12
  • 27. Special forms define (def x 3) conditional (if (> x 1) 'then 'else) (do sequencing (print "hello") (print "world!")) local vars (let [x 1] (+ x 1)) (quote (this returns a list with seven symbols)) quotation '(this returns a list with seven symbols) closures (fn [x n] (+ x n)) Thursday, September 6, 12
  • 28. Convenience macros define a (defn power [x n] function (if (= n 0) 1 (* x (power x (- n 1))))) define a (defmacro unless [cond then else] macro `(if (not ~cond) ~then ~else)) Thursday, September 6, 12
  • 29. Macros! • Functions that transform code trees • aka: code that writes code template (defmacro unless [cond then else] `(if (not ~cond) ~then ~else)) quasi quote ` unquote ~ Thursday, September 6, 12
  • 30. Trying it in the REPL => (defmacro unless [cond then else] `(if (not ~cond) ~then ~else)) #'user/unless => (unless (> 2 3) 'yes 'no) yes => (macroexpand '(unless (> 2 3) 'yes 'no)) (if (clojure.core/not (> 2 3)) (quote yes) (quote no)) => (macroexpand '(unless (> 2 3) (+ 1 2) (* 2 3))) (if (clojure.core/not (> 2 3)) (+ 1 2) (* 2 3)) Thursday, September 6, 12
  • 31. Cascading conditionals (cond' [(> x y) 1] [(< x y) -1] [(= x y) 0])) rest params (defmacro cond' [case & cases] (if (empty? cases) `(when ~(first case) splicing ~(second case)) unquote ~@ `(if ~(first case) ~(second case) macro (cond' ~(first cases) ~@(rest cases))))) recursion Thursday, September 6, 12
  • 32. Testing it out => ((fn [x y] (cond' [(> x y) 1] [(< x y) -1] [(= x y) 0])) 1 2) -1 => (macroexpand-all '(cond' [(> x y) 1] [(< x y) -1] [(= x y) 0])) (if (> x y) 1 (if (< x y) -1 (if (= x y) (do 0)))) Thursday, September 6, 12
  • 33. Why is this cool? • Extend the language with new abstractions • control-flow • state machine • GUI builders • grammars, ... etc. • Reuse Lisp syntax / compile with macros Thursday, September 6, 12
  • 34. s http://www.cwi.nl/~storm/devclj.html Thursday, September 6, 12