$30 off During Our Annual Pro Sale. View Details »

CSE240 Lecture 20

CSE240 Lecture 20

Introduction to Programming Languages
Programming with LISP
(202111)

Javier Gonzalez-Sanchez
PRO

January 20, 2017
Tweet

More Decks by Javier Gonzalez-Sanchez

Other Decks in Programming

Transcript

  1. jgs
    CSE 240
    Introduction to Programming Languages
    Lecture 20: Programming with LISP
    Dr. Javier Gonzalez-Sanchez
    [email protected]
    javiergs.engineering.asu.edu | javiergs.com
    PERALTA 230U
    Office Hours: By appointment

    View Slide

  2. Javier Gonzalez-Sanchez | CSE240 | Fall 2021 | 2
    jgs
    Functional Paradigm

    View Slide

  3. Javier Gonzalez-Sanchez | CSE240 | Fall 2021 | 3
    jgs
    Semantic
    Functional Paradigm
    Key idea:
    Focus on higher level of abstraction
    (free from programming details)
    Features:
    Simpler semantic: no data types, and
    a simpler syntax

    View Slide

  4. Javier Gonzalez-Sanchez | CSE240 | Fall 2021 | 4
    jgs
    Syntax
    § Uniform representation of instructions and data using a single general
    format– a list.
    (functionId param1 param2 param3 ...)
    • (+ 3 2 7 9) ; add 3+2+7+9 and return the result
    21
    • (* 4 2.3) ; multiply 4 by 2.3 and return the result
    9.2
    • (subseq "Hello, World" 2 9)
    "llo, Wo"

    View Slide

  5. Javier Gonzalez-Sanchez | CSE240 | Fall 2021 | 5
    jgs
    Functional Programming
    § Language: we will use LISP (LISt Processing).
    § It uses an interpreter.
    § Automatic management of memory.

    View Slide

  6. Javier Gonzalez-Sanchez | CSE240 | Fall 2021 | 6
    jgs
    You need an Interpreter
    § LispWork Personal Edition –
    http://www.lispworks.com/downloads/index.html
    § Compile Lisp Online –
    http://rextester.com/l/common_lisp_online_compiler
    § Steel Bank Common Lisp –
    http://www.sbcl.org/platform-table.html

    View Slide

  7. Javier Gonzalez-Sanchez | CSE240 | Fall 2021 | 7
    jgs
    Functional Programming
    § A program is a set of lists and they are enclosed with parenthesis.
    § We use lists to represent functions; in a function the first element of the list is the id
    of the function and the rest are parameter(s)
    § Whitespace separate function id and parameters
    § Examples:
    ( print "Hello World" )
    ( + 2 2 )
    ( sqrt 2 )

    View Slide

  8. Javier Gonzalez-Sanchez | CSE240 | Fall 2021 | 8
    jgs
    Important Notice !

    View Slide

  9. Javier Gonzalez-Sanchez | CSE240 | Fall 2021 | 9
    jgs
    Everything is a List
    § A function ID (symbol) is a series of characters other than whitespace, parentheses
    ( ), pound ( # ), quote ( ' ), double-quote ( " ), period ( . ), or back quote ( ` ).
    § A function ID (symbol) may not take the form of numbers.
    § It's very common for symbols to have hyphens ( - ) or asterisks ( * ) in them.
    § There are NOT operators! only functions
    § Symbols (function ID) are case-INSENSITIVE.

    View Slide

  10. Javier Gonzalez-Sanchez | CSE240 | Fall 2021 | 10
    jgs
    Atomic Expressions
    § -3
    § 2.43
    § 123342303923412323411323234012923492341231230234923410239234412
    § #C(3.2 2) ; the complex number 3.2 + 2i
    § 2/3 ; the fraction 2/3. It is NOT divide 2 by 3
    § -3.2e25 ; the number -3.2 x 10^25
    § #\g ; characters starts with #\
    § #\{
    § #\\ ; the character '\'
    § #\tab

    § #\newline
    § 
#\space

    § #\backspace

    § #\escape

    View Slide

  11. Javier Gonzalez-Sanchez | CSE240 | Fall 2021 | 11
    jgs
    Atomic Expressions
    § "Hello, World!"
    § "It's a glorious day."
    § "He said \"No Way!\" and then he left."
    § "I think I need a backslash here: \\ Ah, that was better."
    § t ; true
    § nil ; false

    View Slide

  12. jgs
    Lists

    View Slide

  13. Javier Gonzalez-Sanchez | CSE240 | Fall 2021 | 13
    jgs
    Everything is a List
    § (+ 27/32 32/57)
    2563/1824
    § (* 2.342 3.2e4)
    74944.0
    § (* 2.342 9.212 -9.23 3/4) ; You can mix number types
    -149.34949
    § (/ 3 5) ; The return type stays as general as possible
    3/5
    § (/ 3.0 5) ;Here LISP had no choice: convert to a float
    0.6
    § (1+ 3)
    4

    View Slide

  14. Javier Gonzalez-Sanchez | CSE240 | Fall 2021 | 14
    jgs
    Everything is a List
    § (string-upcase "How about that!")
    "HOW ABOUT THAT!"
    § (reverse "Four score and seven years ago")
    "oga sraey neves dna erocs ruoF"
    § (length "Four score and seven years ago")
    30
    § (sqrt 2)
    1.4142135
    § (sqrt -1.0)
    #C(0 1.0)
    § (SqRt -1.0) ;LISP symbols are case-insensitive
    #C(0 1.0)

    View Slide

  15. Javier Gonzalez-Sanchez | CSE240 | Fall 2021 | 15
    jgs
    Function Arguments
    § Some functions have NOT a fixed number of arguments:
    (+ 100 231 201 921 221 231 -23 12 -34 134)
    § Some functions have a fixed number of arguments and optional arguments:
    (subseq "Four score and seven years ago" 9)
    "e and seven years ago”
    (subseq "Four score and seven years ago" 9 23)
    "e and seven ye"

    View Slide

  16. Javier Gonzalez-Sanchez | CSE240 | Fall 2021 | 16
    jgs
    Predicates (boolean functions)
    § LISP has a special name for functions which return "true" (usually t) or
    "false" (nil). These functions are called predicates.
    • (= 4 3) ; is 4 == 3 ?
    NIL
    • (< 3 9) ; is 3 < 9 ?
    T
    • (numberp "hello") ; is "foo" a number?
    NIL
    • (oddp 9) ; is 9 an odd number?
    T

    View Slide

  17. Javier Gonzalez-Sanchez | CSE240 | Fall 2021 | 17
    jgs
    Errors
    § Errors stop the program execution
    • (/ 1 0)
    *** - division by zero
    • (blah-blah-blah 1 0 "foo")
    *** - EVAL: the function BLAH-BLAH-BLAH is undefined

    View Slide

  18. Javier Gonzalez-Sanchez | CSE240 | Fall 2021 | 18
    jgs
    Recursion
    § When a list contains another list among its expressions, the evaluation
    procedure is recursive.
    • (+ 33 (* 2.3 4) 9)
    51.2
    • (+ (length "Hello World") 44)
    55
    • (* (+ 3 2.3) (/ 3 (- 9 4))) ;in C++: (3+2.3) * (3 / (9-4))
    3.1800003
    • (log (log (log 234231232234234123)))
    1.3052895
    • (+ (* (sin 0.3)
    (sin 0.3)) ; expressions may use multiple lines
    (* (cos 0.3)
    (cos 0.3))) ; sin(0.3)^2 + cos(0.3)^2
    1.0000001 ; = 1. Rounding inaccuracy

    View Slide

  19. Javier Gonzalez-Sanchez | CSE240 | Fall 2021 | 19
    jgs
    Recursion
    § (and (< 3 (* 2 5))
    (not (>= 2 6))) ; (3 < 2 * 5) && !(2 >= 6)
    T
    § (print (+ 2 3 4 1))
    10
    10
    § (+ (* 2 3) (/ 3 2) 9)
    33/2

    View Slide

  20. Javier Gonzalez-Sanchez | CSE240 | Fall 2021 | 20
    jgs
    Questions

    View Slide

  21. jgs
    CSE 240 Introduction to Programming Languages
    Javier Gonzalez-Sanchez, Ph.D.
    [email protected]
    Fall 2021
    Copyright. These slides can only be used as study material for the class CSE240 at Arizona State University.
    They cannot be distributed or used for another purpose.

    View Slide