SLIDE 1
Scheme Announcements Scheme Scheme is a Dialect of Lisp 4 Scheme - - PowerPoint PPT Presentation
Scheme Announcements Scheme Scheme is a Dialect of Lisp 4 Scheme - - PowerPoint PPT Presentation
Scheme Announcements Scheme Scheme is a Dialect of Lisp 4 Scheme is a Dialect of Lisp What are people saying about Lisp? 4 Scheme is a Dialect of Lisp What are people saying about Lisp? "If you don't know Lisp, you don't know what
SLIDE 2
SLIDE 3
Scheme
SLIDE 4
Scheme is a Dialect of Lisp
4
SLIDE 5
Scheme is a Dialect of Lisp
What are people saying about Lisp?
4
SLIDE 6
Scheme is a Dialect of Lisp
What are people saying about Lisp?
- "If you don't know Lisp, you don't know what it means for a programming language to be
powerful and elegant."
- Richard Stallman, created Emacs & the first free variant of UNIX
4
SLIDE 7
Scheme is a Dialect of Lisp
What are people saying about Lisp?
- "If you don't know Lisp, you don't know what it means for a programming language to be
powerful and elegant."
- Richard Stallman, created Emacs & the first free variant of UNIX
- "The only computer language that is beautiful."
- Neal Stephenson, DeNero's favorite sci-fi author
4
SLIDE 8
Scheme is a Dialect of Lisp
What are people saying about Lisp?
- "If you don't know Lisp, you don't know what it means for a programming language to be
powerful and elegant."
- Richard Stallman, created Emacs & the first free variant of UNIX
- "The only computer language that is beautiful."
- Neal Stephenson, DeNero's favorite sci-fi author
- "The greatest single programming language ever designed."
- Alan Kay, co-inventor of Smalltalk and OOP (from the user interface video)
4
SLIDE 9
Scheme Expressions
5
SLIDE 10
Scheme Expressions
Scheme programs consist of expressions, which can be:
5
SLIDE 11
Scheme Expressions
Scheme programs consist of expressions, which can be:
- Primitive expressions: 2 3.3 true + quotient
5
SLIDE 12
Scheme Expressions
Scheme programs consist of expressions, which can be:
- Primitive expressions: 2 3.3 true + quotient
- Combinations: (quotient 10 2) (not true)
5
SLIDE 13
Scheme Expressions
Scheme programs consist of expressions, which can be:
- Primitive expressions: 2 3.3 true + quotient
- Combinations: (quotient 10 2) (not true)
Numbers are self-evaluating; symbols are bound to values
5
SLIDE 14
Scheme Expressions
Scheme programs consist of expressions, which can be:
- Primitive expressions: 2 3.3 true + quotient
- Combinations: (quotient 10 2) (not true)
Numbers are self-evaluating; symbols are bound to values Call expressions include an operator and 0 or more operands in parentheses
5
SLIDE 15
Scheme Expressions
Scheme programs consist of expressions, which can be:
- Primitive expressions: 2 3.3 true + quotient
- Combinations: (quotient 10 2) (not true)
Numbers are self-evaluating; symbols are bound to values Call expressions include an operator and 0 or more operands in parentheses
5
> (quotient 10 2) 5
SLIDE 16
Scheme Expressions
Scheme programs consist of expressions, which can be:
- Primitive expressions: 2 3.3 true + quotient
- Combinations: (quotient 10 2) (not true)
Numbers are self-evaluating; symbols are bound to values Call expressions include an operator and 0 or more operands in parentheses
5
> (quotient 10 2) 5 “quotient” names Scheme’s built-in integer division procedure (i.e., function)
SLIDE 17
Scheme Expressions
Scheme programs consist of expressions, which can be:
- Primitive expressions: 2 3.3 true + quotient
- Combinations: (quotient 10 2) (not true)
Numbers are self-evaluating; symbols are bound to values Call expressions include an operator and 0 or more operands in parentheses
5
> (quotient 10 2) 5 > (quotient (+ 8 7) 5) 3 “quotient” names Scheme’s built-in integer division procedure (i.e., function)
SLIDE 18
Scheme Expressions
Scheme programs consist of expressions, which can be:
- Primitive expressions: 2 3.3 true + quotient
- Combinations: (quotient 10 2) (not true)
Numbers are self-evaluating; symbols are bound to values Call expressions include an operator and 0 or more operands in parentheses
5
> (quotient 10 2) 5 > (quotient (+ 8 7) 5) 3 > (+ (* 3 (+ (* 2 4) (+ 3 5))) (+ (- 10 7) 6)) “quotient” names Scheme’s built-in integer division procedure (i.e., function)
SLIDE 19
Scheme Expressions
Scheme programs consist of expressions, which can be:
- Primitive expressions: 2 3.3 true + quotient
- Combinations: (quotient 10 2) (not true)
Numbers are self-evaluating; symbols are bound to values Call expressions include an operator and 0 or more operands in parentheses
5
> (quotient 10 2) 5 > (quotient (+ 8 7) 5) 3 > (+ (* 3 (+ (* 2 4) (+ 3 5))) (+ (- 10 7) 6)) “quotient” names Scheme’s built-in integer division procedure (i.e., function) Combinations can span multiple lines (spacing doesn’t matter)
SLIDE 20
Scheme Expressions
Scheme programs consist of expressions, which can be:
- Primitive expressions: 2 3.3 true + quotient
- Combinations: (quotient 10 2) (not true)
Numbers are self-evaluating; symbols are bound to values Call expressions include an operator and 0 or more operands in parentheses
5
> (quotient 10 2) 5 > (quotient (+ 8 7) 5) 3 > (+ (* 3 (+ (* 2 4) (+ 3 5))) (+ (- 10 7) 6)) “quotient” names Scheme’s built-in integer division procedure (i.e., function) Combinations can span multiple lines (spacing doesn’t matter)
SLIDE 21
Scheme Expressions
Scheme programs consist of expressions, which can be:
- Primitive expressions: 2 3.3 true + quotient
- Combinations: (quotient 10 2) (not true)
Numbers are self-evaluating; symbols are bound to values Call expressions include an operator and 0 or more operands in parentheses
5
> (quotient 10 2) 5 > (quotient (+ 8 7) 5) 3 > (+ (* 3 (+ (* 2 4) (+ 3 5))) (+ (- 10 7) 6)) “quotient” names Scheme’s built-in integer division procedure (i.e., function) Combinations can span multiple lines (spacing doesn’t matter)
SLIDE 22
Scheme Expressions
Scheme programs consist of expressions, which can be:
- Primitive expressions: 2 3.3 true + quotient
- Combinations: (quotient 10 2) (not true)
Numbers are self-evaluating; symbols are bound to values Call expressions include an operator and 0 or more operands in parentheses
5
> (quotient 10 2) 5 > (quotient (+ 8 7) 5) 3 > (+ (* 3 (+ (* 2 4) (+ 3 5))) (+ (- 10 7) 6)) “quotient” names Scheme’s built-in integer division procedure (i.e., function) Combinations can span multiple lines (spacing doesn’t matter)
SLIDE 23
Scheme Expressions
Scheme programs consist of expressions, which can be:
- Primitive expressions: 2 3.3 true + quotient
- Combinations: (quotient 10 2) (not true)
Numbers are self-evaluating; symbols are bound to values Call expressions include an operator and 0 or more operands in parentheses
5
> (quotient 10 2) 5 > (quotient (+ 8 7) 5) 3 > (+ (* 3 (+ (* 2 4) (+ 3 5))) (+ (- 10 7) 6)) “quotient” names Scheme’s built-in integer division procedure (i.e., function) Combinations can span multiple lines (spacing doesn’t matter)
SLIDE 24
Scheme Expressions
Scheme programs consist of expressions, which can be:
- Primitive expressions: 2 3.3 true + quotient
- Combinations: (quotient 10 2) (not true)
Numbers are self-evaluating; symbols are bound to values Call expressions include an operator and 0 or more operands in parentheses (Demo)
5
> (quotient 10 2) 5 > (quotient (+ 8 7) 5) 3 > (+ (* 3 (+ (* 2 4) (+ 3 5))) (+ (- 10 7) 6)) “quotient” names Scheme’s built-in integer division procedure (i.e., function) Combinations can span multiple lines (spacing doesn’t matter)
SLIDE 25
Special Forms
SLIDE 26
Special Forms
7
SLIDE 27
Special Forms
A combination that is not a call expression is a special form:
7
SLIDE 28
Special Forms
A combination that is not a call expression is a special form:
- if expression: (if <predicate> <consequent> <alternative>)
7
SLIDE 29
Special Forms
A combination that is not a call expression is a special form:
- if expression: (if <predicate> <consequent> <alternative>)
7
Evaluation: (1) Evaluate the predicate expression (2) Evaluate either the consequent or alternative
SLIDE 30
Special Forms
A combination that is not a call expression is a special form:
- if expression: (if <predicate> <consequent> <alternative>)
- and and or: (and <e1> ... <en>), (or <e1> ... <en>)
7
Evaluation: (1) Evaluate the predicate expression (2) Evaluate either the consequent or alternative
SLIDE 31
Special Forms
A combination that is not a call expression is a special form:
- if expression: (if <predicate> <consequent> <alternative>)
- and and or: (and <e1> ... <en>), (or <e1> ... <en>)
- Binding symbols: (define <symbol> <expression>)
7
Evaluation: (1) Evaluate the predicate expression (2) Evaluate either the consequent or alternative
SLIDE 32
Special Forms
A combination that is not a call expression is a special form:
- if expression: (if <predicate> <consequent> <alternative>)
- and and or: (and <e1> ... <en>), (or <e1> ... <en>)
- Binding symbols: (define <symbol> <expression>)
> (define pi 3.14) > (* pi 2) 6.28
7
Evaluation: (1) Evaluate the predicate expression (2) Evaluate either the consequent or alternative
SLIDE 33
Special Forms
A combination that is not a call expression is a special form:
- if expression: (if <predicate> <consequent> <alternative>)
- and and or: (and <e1> ... <en>), (or <e1> ... <en>)
- Binding symbols: (define <symbol> <expression>)
> (define pi 3.14) > (* pi 2) 6.28 The symbol “pi” is bound to 3.14 in the global frame
7
Evaluation: (1) Evaluate the predicate expression (2) Evaluate either the consequent or alternative
SLIDE 34
Special Forms
A combination that is not a call expression is a special form:
- if expression: (if <predicate> <consequent> <alternative>)
- and and or: (and <e1> ... <en>), (or <e1> ... <en>)
- Binding symbols: (define <symbol> <expression>)
- New procedures: (define (<symbol> <formal parameters>) <body>)
> (define pi 3.14) > (* pi 2) 6.28 The symbol “pi” is bound to 3.14 in the global frame
7
Evaluation: (1) Evaluate the predicate expression (2) Evaluate either the consequent or alternative
SLIDE 35
Special Forms
A combination that is not a call expression is a special form:
- if expression: (if <predicate> <consequent> <alternative>)
- and and or: (and <e1> ... <en>), (or <e1> ... <en>)
- Binding symbols: (define <symbol> <expression>)
- New procedures: (define (<symbol> <formal parameters>) <body>)
> (define pi 3.14) > (* pi 2) 6.28 > (define (abs x) (if (< x 0) (- x) x)) > (abs -3) 3 The symbol “pi” is bound to 3.14 in the global frame
7
Evaluation: (1) Evaluate the predicate expression (2) Evaluate either the consequent or alternative
SLIDE 36
Special Forms
A combination that is not a call expression is a special form:
- if expression: (if <predicate> <consequent> <alternative>)
- and and or: (and <e1> ... <en>), (or <e1> ... <en>)
- Binding symbols: (define <symbol> <expression>)
- New procedures: (define (<symbol> <formal parameters>) <body>)
> (define pi 3.14) > (* pi 2) 6.28 > (define (abs x) (if (< x 0) (- x) x)) > (abs -3) 3 The symbol “pi” is bound to 3.14 in the global frame A procedure is created and bound to the symbol “abs”
7
Evaluation: (1) Evaluate the predicate expression (2) Evaluate either the consequent or alternative
SLIDE 37
Special Forms
A combination that is not a call expression is a special form:
- if expression: (if <predicate> <consequent> <alternative>)
- and and or: (and <e1> ... <en>), (or <e1> ... <en>)
- Binding symbols: (define <symbol> <expression>)
- New procedures: (define (<symbol> <formal parameters>) <body>)
> (define pi 3.14) > (* pi 2) 6.28 > (define (abs x) (if (< x 0) (- x) x)) > (abs -3) 3 The symbol “pi” is bound to 3.14 in the global frame A procedure is created and bound to the symbol “abs”
7
Evaluation: (1) Evaluate the predicate expression (2) Evaluate either the consequent or alternative
SLIDE 38
Special Forms
A combination that is not a call expression is a special form:
- if expression: (if <predicate> <consequent> <alternative>)
- and and or: (and <e1> ... <en>), (or <e1> ... <en>)
- Binding symbols: (define <symbol> <expression>)
- New procedures: (define (<symbol> <formal parameters>) <body>)
> (define pi 3.14) > (* pi 2) 6.28 > (define (abs x) (if (< x 0) (- x) x)) > (abs -3) 3 The symbol “pi” is bound to 3.14 in the global frame A procedure is created and bound to the symbol “abs”
7
Evaluation: (1) Evaluate the predicate expression (2) Evaluate either the consequent or alternative (Demo)
SLIDE 39
Scheme Interpreters
(Demo)
SLIDE 40
Lambda Expressions
SLIDE 41
Lambda Expressions
Lambda expressions evaluate to anonymous procedures
10
SLIDE 42
Lambda Expressions
Lambda expressions evaluate to anonymous procedures (lambda (<formal-parameters>) <body>)
10
SLIDE 43
Lambda Expressions
Lambda expressions evaluate to anonymous procedures
λ
(lambda (<formal-parameters>) <body>)
10
SLIDE 44
Lambda Expressions
Lambda expressions evaluate to anonymous procedures
λ
(lambda (<formal-parameters>) <body>) Two equivalent expressions: (define (plus4 x) (+ x 4)) (define plus4 (lambda (x) (+ x 4)))
10
SLIDE 45
Lambda Expressions
Lambda expressions evaluate to anonymous procedures
λ
(lambda (<formal-parameters>) <body>) Two equivalent expressions: (define (plus4 x) (+ x 4)) (define plus4 (lambda (x) (+ x 4))) An operator can be a call expression too:
10
SLIDE 46
Lambda Expressions
Lambda expressions evaluate to anonymous procedures
λ
(lambda (<formal-parameters>) <body>) Two equivalent expressions: (define (plus4 x) (+ x 4)) (define plus4 (lambda (x) (+ x 4))) An operator can be a call expression too: ((lambda (x y z) (+ x y (square z))) 1 2 3)
10
SLIDE 47
Lambda Expressions
Lambda expressions evaluate to anonymous procedures
λ
(lambda (<formal-parameters>) <body>) Two equivalent expressions: (define (plus4 x) (+ x 4)) (define plus4 (lambda (x) (+ x 4))) An operator can be a call expression too: ((lambda (x y z) (+ x y (square z))) 1 2 3) Evaluates to the x+y+z2 procedure
10
SLIDE 48
Lambda Expressions
Lambda expressions evaluate to anonymous procedures
λ
(lambda (<formal-parameters>) <body>) Two equivalent expressions: (define (plus4 x) (+ x 4)) (define plus4 (lambda (x) (+ x 4))) An operator can be a call expression too: ((lambda (x y z) (+ x y (square z))) 1 2 3) Evaluates to the x+y+z2 procedure
10
12
SLIDE 49
Sierpinski's Triangle
(Demo)
SLIDE 50
More Special Forms
SLIDE 51
Cond & Begin
13
SLIDE 52
Cond & Begin
The cond special form that behaves like if-elif-else statements in Python
13
SLIDE 53
Cond & Begin
The cond special form that behaves like if-elif-else statements in Python
13
if x > 10: print('big') elif x > 5: print('medium') else: print('small')
SLIDE 54
Cond & Begin
The cond special form that behaves like if-elif-else statements in Python
13
if x > 10: print('big') elif x > 5: print('medium') else: print('small') (cond ((> x 10) (print 'big)) ((> x 5) (print 'medium)) (else (print 'small)))
SLIDE 55
Cond & Begin
The cond special form that behaves like if-elif-else statements in Python
13
if x > 10: print('big') elif x > 5: print('medium') else: print('small') (cond ((> x 10) (print 'big)) ((> x 5) (print 'medium)) (else (print 'small))) (cond ((> x 10) 'big) ((> x 5) 'medium) (else 'small))
SLIDE 56
Cond & Begin
The cond special form that behaves like if-elif-else statements in Python
13
if x > 10: print('big') elif x > 5: print('medium') else: print('small') (cond ((> x 10) (print 'big)) ((> x 5) (print 'medium)) (else (print 'small))) (cond ((> x 10) 'big) ((> x 5) 'medium) (else 'small)) (print )
SLIDE 57
Cond & Begin
The cond special form that behaves like if-elif-else statements in Python
13
if x > 10: print('big') elif x > 5: print('medium') else: print('small') (cond ((> x 10) (print 'big)) ((> x 5) (print 'medium)) (else (print 'small))) (cond ((> x 10) 'big) ((> x 5) 'medium) (else 'small)) (print ) The begin special form combines multiple expressions into one expression
SLIDE 58
Cond & Begin
The cond special form that behaves like if-elif-else statements in Python
13
if x > 10: print('big') elif x > 5: print('medium') else: print('small') (cond ((> x 10) (print 'big)) ((> x 5) (print 'medium)) (else (print 'small))) (cond ((> x 10) 'big) ((> x 5) 'medium) (else 'small)) (print ) The begin special form combines multiple expressions into one expression if x > 10: print('big') print('guy') else: print('small') print('fry')
SLIDE 59
Cond & Begin
The cond special form that behaves like if-elif-else statements in Python
13
if x > 10: print('big') elif x > 5: print('medium') else: print('small') (cond ((> x 10) (print 'big)) ((> x 5) (print 'medium)) (else (print 'small))) (cond ((> x 10) 'big) ((> x 5) 'medium) (else 'small)) (print ) The begin special form combines multiple expressions into one expression if x > 10: print('big') print('guy') else: print('small') print('fry') (cond ((> x 10) (begin (print 'big) (print 'guy))) (else (begin (print 'small) (print 'fry))))
SLIDE 60
Cond & Begin
The cond special form that behaves like if-elif-else statements in Python
13
if x > 10: print('big') elif x > 5: print('medium') else: print('small') (cond ((> x 10) (print 'big)) ((> x 5) (print 'medium)) (else (print 'small))) (cond ((> x 10) 'big) ((> x 5) 'medium) (else 'small)) (print ) The begin special form combines multiple expressions into one expression if x > 10: print('big') print('guy') else: print('small') print('fry') (cond ((> x 10) (begin (print 'big) (print 'guy))) (else (begin (print 'small) (print 'fry)))) (if (> x 10) (begin (print 'big) (print 'guy)) (begin (print 'small) (print 'fry)))
SLIDE 61
Let Expressions
The let special form binds symbols to values temporarily; just for one expression
14
SLIDE 62
Let Expressions
The let special form binds symbols to values temporarily; just for one expression
14
a = 3 b = 2 + 2 c = math.sqrt(a * a + b * b)
SLIDE 63
Let Expressions
The let special form binds symbols to values temporarily; just for one expression
14
a = 3 b = 2 + 2 c = math.sqrt(a * a + b * b) a and b are still bound down here
SLIDE 64
Let Expressions
The let special form binds symbols to values temporarily; just for one expression
14
a = 3 b = 2 + 2 c = math.sqrt(a * a + b * b) (define c (let ((a 3) (b (+ 2 2))) (sqrt (+ (* a a) (* b b))))) a and b are still bound down here
SLIDE 65
Let Expressions
The let special form binds symbols to values temporarily; just for one expression
14
a = 3 b = 2 + 2 c = math.sqrt(a * a + b * b) (define c (let ((a 3) (b (+ 2 2))) (sqrt (+ (* a a) (* b b))))) a and b are still bound down here a and b are not bound down here
SLIDE 66
Lists
SLIDE 67
Scheme Lists
SLIDE 68
Scheme Lists
In the late 1950s, computer scientists used confusing names
SLIDE 69
Scheme Lists
In the late 1950s, computer scientists used confusing names
- cons: Two-argument procedure that creates a linked list
SLIDE 70
Scheme Lists
In the late 1950s, computer scientists used confusing names
- cons: Two-argument procedure that creates a linked list
- car: Procedure that returns the first element of a list
SLIDE 71
Scheme Lists
In the late 1950s, computer scientists used confusing names
- cons: Two-argument procedure that creates a linked list
- car: Procedure that returns the first element of a list
- cdr: Procedure that returns the rest of a list
SLIDE 72
Scheme Lists
In the late 1950s, computer scientists used confusing names
- cons: Two-argument procedure that creates a linked list
- car: Procedure that returns the first element of a list
- cdr: Procedure that returns the rest of a list
- nil: The empty list
SLIDE 73
Scheme Lists
In the late 1950s, computer scientists used confusing names
- cons: Two-argument procedure that creates a linked list
- car: Procedure that returns the first element of a list
- cdr: Procedure that returns the rest of a list
- nil: The empty list
(cons 2 nil)
2 nil
SLIDE 74
Scheme Lists
In the late 1950s, computer scientists used confusing names
- cons: Two-argument procedure that creates a linked list
- car: Procedure that returns the first element of a list
- cdr: Procedure that returns the rest of a list
- nil: The empty list
2
(cons 2 nil)
2 nil
SLIDE 75
Scheme Lists
In the late 1950s, computer scientists used confusing names
- cons: Two-argument procedure that creates a linked list
- car: Procedure that returns the first element of a list
- cdr: Procedure that returns the rest of a list
- nil: The empty list
Important! Scheme lists are written in parentheses with elements separated by spaces
2
(cons 2 nil)
2 nil
SLIDE 76
Scheme Lists
In the late 1950s, computer scientists used confusing names
- cons: Two-argument procedure that creates a linked list
- car: Procedure that returns the first element of a list
- cdr: Procedure that returns the rest of a list
- nil: The empty list
Important! Scheme lists are written in parentheses with elements separated by spaces
2
(cons 2 nil)
(cons 2 nil)
2 nil 2
SLIDE 77
Scheme Lists
In the late 1950s, computer scientists used confusing names
- cons: Two-argument procedure that creates a linked list
- car: Procedure that returns the first element of a list
- cdr: Procedure that returns the rest of a list
- nil: The empty list
Important! Scheme lists are written in parentheses with elements separated by spaces >
2
(cons 1 ) (cons 2 nil)
1
(cons 2 nil)
2 nil 2
SLIDE 78
Scheme Lists
In the late 1950s, computer scientists used confusing names
- cons: Two-argument procedure that creates a linked list
- car: Procedure that returns the first element of a list
- cdr: Procedure that returns the rest of a list
- nil: The empty list
Important! Scheme lists are written in parentheses with elements separated by spaces > (1 2)
2
(cons 1 ) (cons 2 nil)
1
(cons 2 nil)
2 nil 2
SLIDE 79
Scheme Lists
In the late 1950s, computer scientists used confusing names
- cons: Two-argument procedure that creates a linked list
- car: Procedure that returns the first element of a list
- cdr: Procedure that returns the rest of a list
- nil: The empty list
Important! Scheme lists are written in parentheses with elements separated by spaces > (1 2) > (define x (cons 1 (cons 2 nil))
2
(cons 1 ) (cons 2 nil)
1
(cons 2 nil)
2 nil 2
SLIDE 80
Scheme Lists
In the late 1950s, computer scientists used confusing names
- cons: Two-argument procedure that creates a linked list
- car: Procedure that returns the first element of a list
- cdr: Procedure that returns the rest of a list
- nil: The empty list
Important! Scheme lists are written in parentheses with elements separated by spaces > (1 2) > (define x (cons 1 (cons 2 nil)) > x
2
(cons 1 ) (cons 2 nil)
1
(cons 2 nil)
2 nil 2
SLIDE 81
Scheme Lists
In the late 1950s, computer scientists used confusing names
- cons: Two-argument procedure that creates a linked list
- car: Procedure that returns the first element of a list
- cdr: Procedure that returns the rest of a list
- nil: The empty list
Important! Scheme lists are written in parentheses with elements separated by spaces > (1 2) > (define x (cons 1 (cons 2 nil)) > x (1 2)
2
(cons 1 ) (cons 2 nil)
1
(cons 2 nil)
2 nil 2
SLIDE 82
Scheme Lists
In the late 1950s, computer scientists used confusing names
- cons: Two-argument procedure that creates a linked list
- car: Procedure that returns the first element of a list
- cdr: Procedure that returns the rest of a list
- nil: The empty list
Important! Scheme lists are written in parentheses with elements separated by spaces > (1 2) > (define x (cons 1 (cons 2 nil)) > x (1 2) > (car x)
2
(cons 1 ) (cons 2 nil)
1
(cons 2 nil)
2 nil 2
SLIDE 83
Scheme Lists
In the late 1950s, computer scientists used confusing names
- cons: Two-argument procedure that creates a linked list
- car: Procedure that returns the first element of a list
- cdr: Procedure that returns the rest of a list
- nil: The empty list
Important! Scheme lists are written in parentheses with elements separated by spaces > (1 2) > (define x (cons 1 (cons 2 nil)) > x (1 2) > (car x) 1
2
(cons 1 ) (cons 2 nil)
1
(cons 2 nil)
2 nil 2
SLIDE 84
Scheme Lists
In the late 1950s, computer scientists used confusing names
- cons: Two-argument procedure that creates a linked list
- car: Procedure that returns the first element of a list
- cdr: Procedure that returns the rest of a list
- nil: The empty list
Important! Scheme lists are written in parentheses with elements separated by spaces > (1 2) > (define x (cons 1 (cons 2 nil)) > x (1 2) > (car x) 1 > (cdr x)
2
(cons 1 ) (cons 2 nil)
1
(cons 2 nil)
2 nil 2
SLIDE 85
Scheme Lists
In the late 1950s, computer scientists used confusing names
- cons: Two-argument procedure that creates a linked list
- car: Procedure that returns the first element of a list
- cdr: Procedure that returns the rest of a list
- nil: The empty list
Important! Scheme lists are written in parentheses with elements separated by spaces > (1 2) > (define x (cons 1 (cons 2 nil)) > x (1 2) > (car x) 1 > (cdr x) (2)
2
(cons 1 ) (cons 2 nil)
1
(cons 2 nil)
2 nil 2
SLIDE 86
Scheme Lists
In the late 1950s, computer scientists used confusing names
- cons: Two-argument procedure that creates a linked list
- car: Procedure that returns the first element of a list
- cdr: Procedure that returns the rest of a list
- nil: The empty list
Important! Scheme lists are written in parentheses with elements separated by spaces > (1 2) > (define x (cons 1 (cons 2 nil)) > x (1 2) > (car x) 1 > (cdr x) (2) > (cons 1 (cons 2 (cons 3 (cons 4 nil))))
2
(cons 1 ) (cons 2 nil)
1
(cons 2 nil)
2 nil 2
SLIDE 87
Scheme Lists
In the late 1950s, computer scientists used confusing names
- cons: Two-argument procedure that creates a linked list
- car: Procedure that returns the first element of a list
- cdr: Procedure that returns the rest of a list
- nil: The empty list
Important! Scheme lists are written in parentheses with elements separated by spaces > (1 2) > (define x (cons 1 (cons 2 nil)) > x (1 2) > (car x) 1 > (cdr x) (2) > (cons 1 (cons 2 (cons 3 (cons 4 nil))))
2
(cons 1 ) (cons 2 nil)
1
(cons 2 nil)
2 nil 1 2 3 4 2
SLIDE 88
Scheme Lists
In the late 1950s, computer scientists used confusing names
- cons: Two-argument procedure that creates a linked list
- car: Procedure that returns the first element of a list
- cdr: Procedure that returns the rest of a list
- nil: The empty list
Important! Scheme lists are written in parentheses with elements separated by spaces > (1 2) > (define x (cons 1 (cons 2 nil)) > x (1 2) > (car x) 1 > (cdr x) (2) > (cons 1 (cons 2 (cons 3 (cons 4 nil)))) (1 2 3 4)
2
(cons 1 ) (cons 2 nil)
1
(cons 2 nil)
2 nil 1 2 3 4 2
SLIDE 89
Scheme Lists
In the late 1950s, computer scientists used confusing names
- cons: Two-argument procedure that creates a linked list
- car: Procedure that returns the first element of a list
- cdr: Procedure that returns the rest of a list
- nil: The empty list
Important! Scheme lists are written in parentheses with elements separated by spaces > (1 2) > (define x (cons 1 (cons 2 nil)) > x (1 2) > (car x) 1 > (cdr x) (2) > (cons 1 (cons 2 (cons 3 (cons 4 nil)))) (1 2 3 4)
(Demo)
2
(cons 1 ) (cons 2 nil)
1
(cons 2 nil)
2 nil 1 2 3 4 2
SLIDE 90
Symbolic Programming
SLIDE 91
Symbolic Programming
18
SLIDE 92
Symbolic Programming
Symbols normally refer to values; how do we refer to symbols?
18
SLIDE 93
Symbolic Programming
Symbols normally refer to values; how do we refer to symbols? > (define a 1)
18
SLIDE 94
Symbolic Programming
Symbols normally refer to values; how do we refer to symbols? > (define a 1) > (define b 2)
18
SLIDE 95
Symbolic Programming
Symbols normally refer to values; how do we refer to symbols? > (define a 1) > (define b 2) > (list a b)
18
SLIDE 96
Symbolic Programming
Symbols normally refer to values; how do we refer to symbols? > (define a 1) > (define b 2) > (list a b) (1 2)
18
SLIDE 97
Symbolic Programming
Symbols normally refer to values; how do we refer to symbols? > (define a 1) > (define b 2) > (list a b) (1 2) No sign of “a” and “b” in the resulting value
18
SLIDE 98
Symbolic Programming
Symbols normally refer to values; how do we refer to symbols? > (define a 1) > (define b 2) > (list a b) (1 2) Quotation is used to refer to symbols directly in Lisp. No sign of “a” and “b” in the resulting value
18
SLIDE 99
Symbolic Programming
Symbols normally refer to values; how do we refer to symbols? > (define a 1) > (define b 2) > (list a b) (1 2) Quotation is used to refer to symbols directly in Lisp. No sign of “a” and “b” in the resulting value > (list 'a 'b)
18
SLIDE 100
Symbolic Programming
Symbols normally refer to values; how do we refer to symbols? > (define a 1) > (define b 2) > (list a b) (1 2) Quotation is used to refer to symbols directly in Lisp. No sign of “a” and “b” in the resulting value > (list 'a 'b) (a b)
18
SLIDE 101
Symbolic Programming
Symbols normally refer to values; how do we refer to symbols? > (define a 1) > (define b 2) > (list a b) (1 2) Quotation is used to refer to symbols directly in Lisp. No sign of “a” and “b” in the resulting value > (list 'a 'b) (a b) > (list 'a b)
18
SLIDE 102
Symbolic Programming
Symbols normally refer to values; how do we refer to symbols? > (define a 1) > (define b 2) > (list a b) (1 2) Quotation is used to refer to symbols directly in Lisp. No sign of “a” and “b” in the resulting value > (list 'a 'b) (a b) > (list 'a b) (a 2)
18
SLIDE 103
Symbolic Programming
Symbols normally refer to values; how do we refer to symbols? > (define a 1) > (define b 2) > (list a b) (1 2) Quotation is used to refer to symbols directly in Lisp. No sign of “a” and “b” in the resulting value > (list 'a 'b) (a b) > (list 'a b) (a 2) Short for (quote a), (quote b): Special form to indicate that the expression itself is the value.
18
SLIDE 104
Symbolic Programming
Symbols normally refer to values; how do we refer to symbols? > (define a 1) > (define b 2) > (list a b) (1 2) Quotation is used to refer to symbols directly in Lisp. No sign of “a” and “b” in the resulting value > (list 'a 'b) (a b) > (list 'a b) (a 2) Quotation can also be applied to combinations to form lists. Short for (quote a), (quote b): Special form to indicate that the expression itself is the value.
18
SLIDE 105
Symbolic Programming
Symbols normally refer to values; how do we refer to symbols? > (define a 1) > (define b 2) > (list a b) (1 2) Quotation is used to refer to symbols directly in Lisp. No sign of “a” and “b” in the resulting value > (list 'a 'b) (a b) > (list 'a b) (a 2) Quotation can also be applied to combinations to form lists. > '(a b c) Short for (quote a), (quote b): Special form to indicate that the expression itself is the value.
18
SLIDE 106
Symbolic Programming
Symbols normally refer to values; how do we refer to symbols? > (define a 1) > (define b 2) > (list a b) (1 2) Quotation is used to refer to symbols directly in Lisp. No sign of “a” and “b” in the resulting value > (list 'a 'b) (a b) > (list 'a b) (a 2) Quotation can also be applied to combinations to form lists. > '(a b c) (a b c) Short for (quote a), (quote b): Special form to indicate that the expression itself is the value.
18
SLIDE 107
Symbolic Programming
Symbols normally refer to values; how do we refer to symbols? > (define a 1) > (define b 2) > (list a b) (1 2) Quotation is used to refer to symbols directly in Lisp. No sign of “a” and “b” in the resulting value > (list 'a 'b) (a b) > (list 'a b) (a 2) Quotation can also be applied to combinations to form lists. > '(a b c) (a b c) > (car '(a b c)) Short for (quote a), (quote b): Special form to indicate that the expression itself is the value.
18
SLIDE 108
Symbolic Programming
Symbols normally refer to values; how do we refer to symbols? > (define a 1) > (define b 2) > (list a b) (1 2) Quotation is used to refer to symbols directly in Lisp. No sign of “a” and “b” in the resulting value > (list 'a 'b) (a b) > (list 'a b) (a 2) Quotation can also be applied to combinations to form lists. > '(a b c) (a b c) > (car '(a b c)) a Short for (quote a), (quote b): Special form to indicate that the expression itself is the value.
18
SLIDE 109
Symbolic Programming
Symbols normally refer to values; how do we refer to symbols? > (define a 1) > (define b 2) > (list a b) (1 2) Quotation is used to refer to symbols directly in Lisp. No sign of “a” and “b” in the resulting value > (list 'a 'b) (a b) > (list 'a b) (a 2) Quotation can also be applied to combinations to form lists. > '(a b c) (a b c) > (car '(a b c)) a > (cdr '(a b c)) Short for (quote a), (quote b): Special form to indicate that the expression itself is the value.
18
SLIDE 110
Symbolic Programming
Symbols normally refer to values; how do we refer to symbols? > (define a 1) > (define b 2) > (list a b) (1 2) Quotation is used to refer to symbols directly in Lisp. No sign of “a” and “b” in the resulting value > (list 'a 'b) (a b) > (list 'a b) (a 2) Quotation can also be applied to combinations to form lists. > '(a b c) (a b c) > (car '(a b c)) a > (cdr '(a b c)) (b c) Short for (quote a), (quote b): Special form to indicate that the expression itself is the value.
18
SLIDE 111
Symbolic Programming
Symbols normally refer to values; how do we refer to symbols? > (define a 1) > (define b 2) > (list a b) (1 2) Quotation is used to refer to symbols directly in Lisp. No sign of “a” and “b” in the resulting value > (list 'a 'b) (a b) > (list 'a b) (a 2) Quotation can also be applied to combinations to form lists. > '(a b c) (a b c) > (car '(a b c)) a > (cdr '(a b c)) (b c) Short for (quote a), (quote b): Special form to indicate that the expression itself is the value.
18
(Demo)
SLIDE 112
Programs as Data
SLIDE 113
A Scheme Expression is a Scheme List
20
SLIDE 114
A Scheme Expression is a Scheme List
Scheme programs consist of expressions, which can be:
20
SLIDE 115
A Scheme Expression is a Scheme List
Scheme programs consist of expressions, which can be:
- Primitive expressions: 2 3.3 true + quotient
20
SLIDE 116
A Scheme Expression is a Scheme List
Scheme programs consist of expressions, which can be:
- Primitive expressions: 2 3.3 true + quotient
- Combinations: (quotient 10 2) (not true)
20
SLIDE 117
A Scheme Expression is a Scheme List
Scheme programs consist of expressions, which can be:
- Primitive expressions: 2 3.3 true + quotient
- Combinations: (quotient 10 2) (not true)
20
The built-in Scheme list data structure (which is a linked list) can represent combinations
SLIDE 118
A Scheme Expression is a Scheme List
Scheme programs consist of expressions, which can be:
- Primitive expressions: 2 3.3 true + quotient
- Combinations: (quotient 10 2) (not true)
20
scm> (list 'quotient 10 2) The built-in Scheme list data structure (which is a linked list) can represent combinations
SLIDE 119
A Scheme Expression is a Scheme List
Scheme programs consist of expressions, which can be:
- Primitive expressions: 2 3.3 true + quotient
- Combinations: (quotient 10 2) (not true)
20
scm> (list 'quotient 10 2) (quotient 10 2) The built-in Scheme list data structure (which is a linked list) can represent combinations
SLIDE 120
A Scheme Expression is a Scheme List
Scheme programs consist of expressions, which can be:
- Primitive expressions: 2 3.3 true + quotient
- Combinations: (quotient 10 2) (not true)
20
scm> (list 'quotient 10 2) (quotient 10 2) The built-in Scheme list data structure (which is a linked list) can represent combinations
SLIDE 121
A Scheme Expression is a Scheme List
Scheme programs consist of expressions, which can be:
- Primitive expressions: 2 3.3 true + quotient
- Combinations: (quotient 10 2) (not true)
20
scm> (list 'quotient 10 2) (quotient 10 2) scm> (eval (list 'quotient 10 2)) The built-in Scheme list data structure (which is a linked list) can represent combinations
SLIDE 122
A Scheme Expression is a Scheme List
Scheme programs consist of expressions, which can be:
- Primitive expressions: 2 3.3 true + quotient
- Combinations: (quotient 10 2) (not true)
20
scm> (list 'quotient 10 2) (quotient 10 2) scm> (eval (list 'quotient 10 2)) 5 The built-in Scheme list data structure (which is a linked list) can represent combinations
SLIDE 123
A Scheme Expression is a Scheme List
Scheme programs consist of expressions, which can be:
- Primitive expressions: 2 3.3 true + quotient
- Combinations: (quotient 10 2) (not true)
20
scm> (list 'quotient 10 2) (quotient 10 2) scm> (eval (list 'quotient 10 2)) 5 The built-in Scheme list data structure (which is a linked list) can represent combinations
SLIDE 124
A Scheme Expression is a Scheme List
Scheme programs consist of expressions, which can be:
- Primitive expressions: 2 3.3 true + quotient
- Combinations: (quotient 10 2) (not true)
20
scm> (list 'quotient 10 2) (quotient 10 2) scm> (eval (list 'quotient 10 2)) 5 The built-in Scheme list data structure (which is a linked list) can represent combinations In such a language, it is straightforward to write a program that writes a program
SLIDE 125
A Scheme Expression is a Scheme List
Scheme programs consist of expressions, which can be:
- Primitive expressions: 2 3.3 true + quotient
- Combinations: (quotient 10 2) (not true)
20
scm> (list 'quotient 10 2) (quotient 10 2) scm> (eval (list 'quotient 10 2)) 5 (Demo) The built-in Scheme list data structure (which is a linked list) can represent combinations In such a language, it is straightforward to write a program that writes a program
SLIDE 126
Generating Code
SLIDE 127
Quasiquotation
22
SLIDE 128
Quasiquotation
There are two ways to quote an expression
22
SLIDE 129
Quasiquotation
There are two ways to quote an expression Quote: '(a b) => (a b)
22
SLIDE 130
Quasiquotation
There are two ways to quote an expression Quote: '(a b) => (a b) Quasiquote: `(a b) => (a b)
22
SLIDE 131
Quasiquotation
There are two ways to quote an expression Quote: '(a b) => (a b) Quasiquote: `(a b) => (a b) They are different because parts of a quasiquoted expression can be unquoted with ,
22
SLIDE 132
Quasiquotation
There are two ways to quote an expression Quote: '(a b) => (a b) Quasiquote: `(a b) => (a b) They are different because parts of a quasiquoted expression can be unquoted with , (define b 4)
22
SLIDE 133
Quasiquotation
There are two ways to quote an expression Quote: '(a b) => (a b) Quasiquote: `(a b) => (a b) They are different because parts of a quasiquoted expression can be unquoted with , (define b 4) Quote: '(a ,(+ b 1)) => (a (unquote (+ b 1))
22
SLIDE 134
Quasiquotation
There are two ways to quote an expression Quote: '(a b) => (a b) Quasiquote: `(a b) => (a b) They are different because parts of a quasiquoted expression can be unquoted with , (define b 4) Quote: '(a ,(+ b 1)) => (a (unquote (+ b 1)) Quasiquote: `(a ,(+ b 1)) => (a 5)
22
SLIDE 135
Quasiquotation
There are two ways to quote an expression Quote: '(a b) => (a b) Quasiquote: `(a b) => (a b) They are different because parts of a quasiquoted expression can be unquoted with , (define b 4) Quote: '(a ,(+ b 1)) => (a (unquote (+ b 1)) Quasiquote: `(a ,(+ b 1)) => (a 5) Quasiquotation is particularly convenient for generating Scheme expressions:
22
SLIDE 136
Quasiquotation
There are two ways to quote an expression Quote: '(a b) => (a b) Quasiquote: `(a b) => (a b) They are different because parts of a quasiquoted expression can be unquoted with , (define b 4) Quote: '(a ,(+ b 1)) => (a (unquote (+ b 1)) Quasiquote: `(a ,(+ b 1)) => (a 5) Quasiquotation is particularly convenient for generating Scheme expressions: (define (make-add-procedure n) `(lambda (d) (+ d ,n)))
22
SLIDE 137
Quasiquotation
There are two ways to quote an expression Quote: '(a b) => (a b) Quasiquote: `(a b) => (a b) They are different because parts of a quasiquoted expression can be unquoted with , (define b 4) Quote: '(a ,(+ b 1)) => (a (unquote (+ b 1)) Quasiquote: `(a ,(+ b 1)) => (a 5) Quasiquotation is particularly convenient for generating Scheme expressions: (define (make-add-procedure n) `(lambda (d) (+ d ,n))) (make-add-procedure 2) => (lambda (d) (+ d 2))
22
SLIDE 138
Example: While Statements
23
SLIDE 139
Example: While Statements
What's the sum of the squares of even numbers less than 10, starting with 2?
23
SLIDE 140
Example: While Statements
What's the sum of the squares of even numbers less than 10, starting with 2?
23
x = 2 total = 0 while x < 10: total = total + x * x x = x + 2
SLIDE 141
Example: While Statements
What's the sum of the squares of even numbers less than 10, starting with 2?
23
x = 2 total = 0 while x < 10: total = total + x * x x = x + 2 (define (f x total) (if (< x 10) (f (+ x 2) (+ total (* x x))) total))
SLIDE 142
Example: While Statements
What's the sum of the squares of even numbers less than 10, starting with 2?
23
x = 2 total = 0 while x < 10: total = total + x * x x = x + 2 (define (f x total) (if (< x 10) (f (+ x 2) (+ total (* x x))) total)) (f 2 0))
SLIDE 143
Example: While Statements
What's the sum of the squares of even numbers less than 10, starting with 2?
23
x = 2 total = 0 while x < 10: total = total + x * x x = x + 2 (define (f x total) (if (< x 10) (f (+ x 2) (+ total (* x x))) total)) (begin ) (f 2 0))
SLIDE 144
Example: While Statements
What's the sum of the squares of even numbers less than 10, starting with 2?
23
x = 2 total = 0 while x < 10: total = total + x * x x = x + 2 (define (f x total) (if (< x 10) (f (+ x 2) (+ total (* x x))) total)) (begin ) (f 2 0)) What's the sum of the numbers whose squares are less than 50, starting with 1?
SLIDE 145
Example: While Statements
What's the sum of the squares of even numbers less than 10, starting with 2?
23
x = 2 total = 0 while x < 10: total = total + x * x x = x + 2 (define (f x total) (if (< x 10) (f (+ x 2) (+ total (* x x))) total)) (begin ) (f 2 0)) x = 1 total = 0 while x * x < 50: total = total + x x = x + 1 What's the sum of the numbers whose squares are less than 50, starting with 1?
SLIDE 146
Example: While Statements
What's the sum of the squares of even numbers less than 10, starting with 2?
23
x = 2 total = 0 while x < 10: total = total + x * x x = x + 2 (define (f x total) (if (< x 10) (f (+ x 2) (+ total (* x x))) total)) (begin ) (f 2 0)) x = 1 total = 0 while x * x < 50: total = total + x x = x + 1 (define (f x total) (if (< (* x x) 50) (f (+ x 1) (+ total x)) total)) (begin ) (f 1 0)) What's the sum of the numbers whose squares are less than 50, starting with 1?
SLIDE 147
Example: While Statements
What's the sum of the squares of even numbers less than 10, starting with 2?
23