An Introduction to Scheme

Save this PDF as:

Size: px
Start display at page:

Transcription

1 An Introduction to Scheme Stéphane Ducasse Stéphane Ducasse 1

2 Scheme Minimal Statically scoped Functional Imperative Stack manipulation Specification in a couple of pages 2

3 RoadMap Execution principle Basic elements Pairs and Lists Function definition Some special forms One example of function 3

4 Conventions...? for predicates equal?, boolean?...! for side-effect set! *global* char-, string-, vector- procedures

5 Read-Eval-Print Read an expression Evaluate it Print the result and goto 1. read eval print Using a Scheme interpreter > (+ 1 3) 4 In this document 5

6 Implication An interpreter always gets the value of an expression Different kinds of expression, forms, gets evaluated differently some are self-evaluating: boolean, characters, numbers user-defined functions evaluate all their arguments special forms evaluate some of their arguments (if, when, set!, define, lambda,...) Prefix (+ 1 2) Value of first element applied on values of the rest

7 Examples > 4 ;; self-evaluable 4 > -5-5 > (* 5 6) ;; applying * 30 > ( ) ;; applying + 20 > (* 4 (* 5 6)) ;; nested expressiosn 120 > (* 7 (- 5 4) 8) 56 > (- 6 (/ 12 4) (* 2 (+ 5 6)))

8 Function Examples (define (square nb) ;; return the square of a number ;; nb -> nb (* nb nb)) (square 9) => 81 (square 4) => 16 8

9 RoadMap Execution principle Basic elements Pairs and Lists Function definition Some special forms One example of function 9

10 Basic Elements Simple data types booleans numbers characters strings

11 Booleans #t and #f (not #f ) => #t (and (= 2 2) (> 2 1)) => #t (or (= 2 2) (> 2 1)) => #t (or (= 2 2) (< 2 1)) => #t 11

12 Booleans #t and #f (boolean? #t) => #t (boolean? hello ) => #f self-evaluating > #t #t

13 Numbers self-evaluating 1.2 => 1.2 1/2 => 1/2 1 => 1 2+3i => 2+3i

14 Number Comparison Numbers can tested for equality using the generalpurpose equality predicate eqv? (eqv? ) => #t (eqv? 42 #f ) => #f (eqv? ) => #f However, if you know that the arguments to be compared are numbers, the special number-equality predicate =is more apt. (= ) => #t (= ) => #t Other number comparisons allowed are <,<=,>,>=.

15 Numbers Operations ( ) => 6 ( ) => 3.3 ( ) => 2 (* 1 2 3) => 6 (/ 6 3) => 2 (/22 7) => 22/7 (expt 23) => 8 (expt 4 1/2) => 2.0 (-4) => -4 (/4) => 1/4 (max ) => 4 (min )=> 1 (abs 3) => 3

16 Number Predicates (number? 42) => #t (number? #t) => #f (complex? 2+3i) => #t (real? 2+3i) => #f (real? ) => #t (real? 22/7) => #t (real? 42) => #t (rational? 2+3i) => #f (rational? ) => #t (rational? 22/7) => #t (integer? 22/7) => #f (integer? 42) => #t

17 Strings abc d d self-evaluating abc => abc (string #\s #\q #\u #\e #\a #\k) => squeak (string-ref squeak 3) => #\e (string-append sq ue ak ) => squeak (define hello hello ) (string-set! hello 1 #\a) hello => hallo (string? hello) => #t

18 Symbols identifiers for variable x, this-is-a-symbol,i18n,<=> Not self-evaluating Evaluation returns their value Symbols are unique compared to strings > (eq? (string->symbol "blabla") (string->symbol "blabla")) #t > (eq? "blabla" "blabla") #f 18

19 Assigning Value (define symbol expr) define a new symbol having as value the value of expr (set! symbol expr) change the value of symbol to be the one of expr > (define xyz (+ 5 5) > xyz 10 > (set! xyz (* 2 xyz)) > xyz 20

20 Quote How to manipulate a variable and not its value? Quote it! a => a (* 2 3) => (* 2 3) ;; a list Remember: Something => Something Elephant => Elephant Elephant => Elephant 20

21 RoadMap Execution principle Basic elements Pairs and Lists Function definition Some special forms One example of function

22 Pairs Two values: an ordered couple, a pair (cons a b) => (a. b) (car (cons a b)) => a (cdr (cons a b)) => b Not self-evaluating (1. #t) => (1. #t) (1. #t) => Error

23 A Graphical Notation (cons 'a 'b) => (a. b) a (cons 'a (cons 'b 'c) => (a. (b. c)) b a b c

24 Nested Pairs (cons (cons 1 2) 3) => ((1. 2). 3) (car (cons (cons 1 2) 3)) => (1. 2) (cdr (car (cons (cons 1 2) 3))) => 2 (car (car (cons (cons 1 2) 3))) => 1 (caar (cons (cons 1 2) 3)) => 1 Notation (cons 1 (cons 2 (cons 3 (cons 4 5)))) => ( ) <=> (1. ( 2. ( 3. ( 4. 5))))

25 The Empty List Empty list: () () => () (null? (a b)) => #f (null? ()) => #t (pair? ()) => #f

26 List and Pairs (a. ())) = (a) A list is either the empty list or a pair whose cdr is a list a (cons 'a (cons 'b '()) => (a b) a (cons 1 ()) => (1. ()) <=> (1) b ( ) <=> (1. (2. (3. (4. ())))) <=> (cons 1 (cons 2 (cons 3 (cons 4 ())))

27 Consequences... (car (a b c d)) => a (cdr (a b c d)) => (b c d) (cons a (b c d)) => (a b c d) (car ()) => Error (cdr ()) => Error (pair? ()) => #f (null? ()) => #t

28 List Predicates (pair? '(1.2)) => #t (pair? '(1 2)) => #t (pair? '()) => #f (list? '()) => #t (null? '()) => #t (list? '(1 2)) => #t (list? '(1.2)) => #f (null? '(1 2)) => #f (null? '(1.2)) => #f

29 (List...) (list...) evaluates all its arguments and create a list with results > (list 1 (+ 1 2) 3 4) => ( ) > (list a b c) => (a b c) > ( ) => ( )

30 (Append...) (append l1 l2..) Evaluates its arguments and returns the concatenation of the results (append (a b c) (d e) (a)) > (a b c d e a) (append (a b c) ()) > (a b c)

31 List Evaluation List evaluation is function application Examine the first element of the s-expression. If the head evaluates to a procedure, the rest of the form is evaluated to get the procedure's argument values, and the procedure is applied to them. User-defined functions evaluate this way. Applicative order

32 List evaluation (+ (* 3 2) 4) + => procedure (* 3 2) => same process => 6 4 => 4 => 10 32

33 Quote and List Quote forces lists to be treated as data (define x (cons a b)) x => (cons a b) (list? x) => #t (pair? x) => #t (quote '()) => '() ''() => '()

34 Food for thought (cons car cdr) (list this (is silly)) (cons is (this silly?)) (quote (+ 2 3)) (cons + (2 3)) (quote cons) (quote (quote cons)) ((car (list + - *)) 2 3)

35 RoadMap Execution principle Basic elements Function definition Some special forms One example of function 35

36 Procedure cons => #<primitive:cons> cons is a global variable referring to the primitive cons procedure (car (+ 1 2)) => + (car (list + 1 2)) => #<primitive:+>

37 User Defined Procedure (define (name arguments) body) (define (id x) x) f => #<procedure:f> > (id 3) 3 > (id a) a

38 Main Definition Form (define (name x y) body) (define (square x) (* x x))

39 Recursive definitions... (define (length l) (if (null? l) 0 (+ 1 (length (cdr l))) (define (useless l) (if (null? l) () (cons (car l) (useless (cdr l))) 39

40 Towards map (define (mymap f l) (if (null? l) '() (cons (f (car l)) (mymap f (cdr l))))) 40

41 (map... (map abs '(1-2 3)) > (1 2 3) (map abs '(1 (-2) 3)) > error (map cons '(1 2 3) '(a b c)) > ((1. a) (2. b) (3. c)) (map (lambda (x) (* x x)) '(1 2 3)) > (1 4 9) 41

42 define and lambda (define (square x) (* x x)) (define square (lambda (x) (* x x))) 42

43 Compose (define compose (lambda (g f) (lambda (x) (g (f x))))) ((compose (lambda (x) (+ x 2)) (lambda (x) (* 3 x))) 7) => 23 43

44 RoadMap Variables Environment Let, Let*, Letrec The notion of closure High-order functions 44

45 define, lambda and let (define (f x) (define (f-help y) (/ (+ y 1) (- y 1))) (f-help (square x))) (define (f x) ((lambda (y) (/ (+ y 1) (- y 1))) (square x))) Binds y to (square x) (define (f x) (let ((y (square x))) (/ (+ y 1) (- y 1)))) 45

46 Lambda... ((lambda (formal parameters) body) arguments) creates bindings from formal parameter with arguments and evaluates body (define x 20) ;; modifies the lexical binding of a variable (define add2 (lambda (x) (set! x (+ x 2)) x)) (add2 3) => 5 (add2 x) => 22 x => 20 46

47 Let & Lambda (let ((variable-1 expression-1) (variable-2 expression-2)... (variable-n expression-n)) body) is syntactic sugar for ((lambda (variable-1...variable-n) body) expression-1... expression-n) 47

48 Let and Lambda (let ((x (* 4 5)) (y 3)) (+ x y)) is equivalent to ((lambda (x y) (+ x y)) (* 4 5) 3) 48

49 (Let... (let [(x 2) (y 3)] (* x y)) => 6 Bindings are evaluation order is not relevant. (let [(x 2) (y 3)] (let [(x 7) (z (+ x y))] (* z x))) => 35 [ is the same as ( it is just more readable When binding z only (x 2) is visible. 49

50 Let Examples (let [(x 1) (y 2) (z 3)] (list x y z)) => (1 2 3) (define x 20) (let [(x 1) (y x)] (+ x y)) => 21 (let [(cons (lambda (x y) (+ x y)))] (cons 1 2)) => 3 50

51 (Let* (let [(x 2) (y 3)] (let* [(x 7) (z (+ x y))] (* z x))) => 70 (let* [(x 1) (y x)] (+ x y)) => 2 equivalent to (let [(x 1)] (let [(y x)] (+ x y))) => 2 51

52 Where let is not enough (let ((sum (lambda (ls) (if (null? ls) 0 (+ ( car ls) (sum (cdr ls))))))) (sum '( ))) > reference to undefined identifier sum 52

53 Passing itself (let ((sum (lambda (s ls) (if (null? ls) 0 (+ ( car ls) (s s (cdr ls))))))) (sum sum '( ))) Works but not really satisfactory 53

54 Let is not enough (let [(local-even? (lambda (n) (if (= n 0) #t (local-odd? (- n1))))) (local-odd? (lambda (n) (if (= n 0) #f (local-even? (- n 1)))))] (list (local-even? 23) (local-odd? 23))) local-even? and local-odd? don't refer to the variables we are defining but other in parent environment. Changing the let to a let* won't work either, local-even? inside localodd? 's body refers to the correct procedure value, the local-odd? in local-even? 's body still points elsewhere. 54

55 (letrec... (letrec ((var expr)...) body) extends the current environment with vars with undefined values and associate to the vars the value of exprs evaluated within this environment. (letrec [(local-even? (lambda (n) (if (= n 0) #t (local-odd? (- n 1))))) (local-odd? (lambda (n) (if (= n 0) #f (local-even? (- n 1)))))] (list (local-even? 23) (local-odd? 23))) 55

56 Variables and Env (i) > n ERROR: Undefined global variable n > (define n 5) > n 5 > (* 4 n) 20 (define name expression) (set! name expression) (lambda... (let... 56

57 Variable and Env (ii) In Scheme one single value for a symbol used as operator or operand > (\$ 4 5) ERROR: Undefined global variable \$ > (define \$ +) > (\$ 4 5) 9 > (define som +) > (som 4 5) 9 57

58 Lexical Scope (define (test a b) (+ a b c)) > (test 1 2) reference to undefined identifier: c > (define (top-test c) (test 1 2)) > (top-test 3) reference to undefined identifier: c See more with closure 58

59 Closure Closure: Environment + function (let [(a 5)] (let [(f (lambda (x) (+ x a))) (a 0)] (f 10))) => 15 Lambda refers to it environment! (let [(a 5)] (let [(f (lambda (x) (+ x a)))] (set! a 0) (f 10))) => 10 59

60 Creation Time Binding The same bindings that were in effect when the procedure was created are in effect when it is applied (let ((m (let ((x 2)) (lambda (y) (list x y))))) (let ((x 3)) (m 4))) > (2 4) 60

61 Spying Cons... (define cons-count 0) (define cons (let ([old-cons cons]) (lambda (x y) (set! cons-count (+ cons-count 1)) (old-cons x y)))) >(cons 'a 'b) (a. b) > cons-count 1 >(list 1 2 3) > cons-count 1 61

62 A Simple Counter (define counter 0) (define bump-counter (lambda () (set! counter (+counter 1)) counter)) (bump-counter) => 1 (bump-counter) => 2 Simple because everybody can change it and we can only have one 62

63 Counters... (define next 0) (define count (lambda () (let ([v next]) (set! next (+ next 1)) v))) next visible by others! (define count (let ([next 0]) (lambda () (let ([v next]) (set! next (+ next 1)) v)))) Now next is private to count 63

64 Counters... (define make-counter (lambda () (let ([next 0]) (lambda () (let ([v next]) (set! next (+ next 1)) v))))) > (define c1 (make-counter) > (c1) (c1) 1 > (define c2 (make-counter)) > (c2) 1 64

65 Kind of objects (define (make-fib-counter) (let ((nb 0)) (letrec ((fib (lambda (n) (set! nb (+ 1 nb)) (if (< n 2) n (+ (fib (- n 1)) (fib (- n 2))))))) (lambda message (case (car message) ((fib) (fib (cadr message))) ((nb) nb) ((reset) (set! nb 0))))))) >(define fibc (make-fib-counter)) >(fibc 'fib 6) 8 > (fibc 'nb) 25 ;; number of recursive calls 65

66 RoadMap Execution principle Basic elements Function definition Some special forms One example of function 66

67 Special Forms Some forms have specific evaluation strategy Example (if test truecase falsecase) does not evaluate all its arguments! Hopefully! (lambda does not evaluate its argument) Some special forms are: define, set!, cond, if, lambda... We will see how to define special forms in the future

68 Sequence (begin exp1... expn) evaluates exp1...expn and returns the value of expn (begin (display "really!") (newline) (display "squeak is cool!")) Scheme is not a pure functional language, it favors functional style but enables also imperative programming

69 (If...) (if (char<? c#\c ) -1 (if (char=? c#\c ) 0 1))

70 (Cond...) (cond ((predicate-expr1) actions1...) ((predicate-expr2) actions2...)... (else actionsn...)) when predicate-expri is true, executes actionsi and returns the value of the last actionsi

71 Cond Example (cond ((char<? c#\c ) -1) ((char=? c#\c ) 0) (else 1)) The cond actions are implicit begin s

72 (case...) (case #\e ((#\a) 1) ((#\b) 2) ((#\c #\e) 3) (else 4)) > 3 (case (car (a b)) ( a 1) ( b 2))

73 Let (let ((variable-1 expression-1) (variable-2 expression-2)... (variable-n expression-n)) body) (let ((x (* 4 5)) (y 3)) (+ x y))

74 Macros Mechanism needed when the language needs to be extended with new constructions Provide an easy way to control evaluation of arguments. New special forms can be defined as macros 74

75 Adding ifnot: ifn Problem: How to add ifn such as: (ifn expr then else) => then if expr is false, else else A first (not working) solution: (define (ifn expr then else) (if (not expr) then else)) What does the following do? (ifn (= 1 2) (display foo ) (display bar )) 75

76 Defining a special form Arguments passed to ifn should not be evaluated. So ifn cannot be described with a simple function. A macro has to be used: (define-macro (ifn test then else) (list if test else then) Two phases: 1) macro-expansion: syntactic rewriting 2) evaluation in the current environment of the resulting expression 76

77 ifn decomposed The expression: (ifn (= 1 2) (display foo ) (display bar )) is first rewritten as: (if (= 1 2) (display bar ) (display foo )) and then evaluated: >foo 77

78 In the need for macrocharacters Here an example that can be simplified: (define-macro (when test s1. Lbody) (list 'if test (append (list 'begin s1) Lbody) #f)) Same with macrocharacters (define-macro (when test s1. Largs) `(if,test #f)) 78

79 Macrocharacters Useful for lighter macro definitions ` is almost equivalent to except arguments preceded by, are evaluated. (define-macro (ifn test then else) retrieve the contents of the list (let ((a abc) (b (1 2 3)) => (abc (1 2 3) 1 2 3) 79

80 New Iterators > (map list '(1 (2) 3)) ((1) ((2)) (3)) (define (append-map f L) (apply append (map f L)) >(append-map list '(1 (2) 3)) (1 (2) 3) (define (flatten s) (if (list? s) (append-map flatten s) (list s))) >(flatten '(((1)) (1) 1)) (1 1 1) 80

81 New Iterators (define (map-select f L p?) (append-map (lambda (x) (if (p? x) (list (f x)) ())) L)) > (map-select (lambda (x) (+ 10 x)) '( ) (lambda (x) (odd? x))) (11 13) (define (every f L) (if (null? L) #t (and (f (car L)) (every f (cdr L)))) 81

82 Sums... (define (sum-ints a b) (if (> a b) 0 (+ a (sum-ints (+ a 1) b)))) (sum-ints 3 7) => 25 (define (sum-sqrs a b) (if (> a b) 0 (+ (square a) (sum-sqrs (+ 1 a) b)))) (sum-sqrs 3 7) => 135 (define (sum term next a b) (if (> a b) 0 (+ (term a) (sum term next (next a) b)))) (sum id plus-one 3 7) 82

83 Compose (define compose (lambda (g f) (lambda (x) (g (f x))))) ((compose (lambda (x) (+ x 2)) (lambda (x) (* 3 x))) 7) => 23 83

84 Compose at Work (define fth (compose car cddddr)) > (fth '( )) 5 84

85 Derivation Dg(x) = (g(x+dx) - g(x)) / dx (define dx ) (define (deriv g) (lambda (x) (/ (- (g (+ x dx)) (g x)) dx))) (define (cube x) (* x x x)) 85

86 Capture (define capture (lambda l (lambda (f) (f l)))) Currification (define onetosix (capture )) >(onetosix car) 1 >(onetosix (lambda (x) 86

87 Continuations How to escape the current computation after an error? How to discard pending computation? How to control the future computation? Applications Advanced control flow Escaping mechanism Web server Difficulty escaping a computation > (+ ( 1000 (abort (* 2 3))) ( )) > 6 87

88 Continuations 88

89 Two Approaches Explicit continuation of a computation Continuation Passing Style CSP by adding a new parameter that represents the current continuation of the computation Using call/cc which captures the current continuation 89

90 CSP: Manual Continuation (define (foo x) is transformed into (define (k-foo x cont) so that k-foo returns (cont (foo x)) Pros control the future of the computation can give up and choose another future can be stored of passed to another functions Cons tedious 90

91 Factorial-k (define (fac n) (if (= 0 n) 1 (* n (fac (- n 1))))) (define (kfac n k)...?? (kfac 5 (lambda (x) x)) 120 (kfac 5 (lambda (x) (+ 2 x)))

92 Getting Factorial-k (kfac 0 k) = (k (fac 0)) = (k 1) (kfac n k) = (k (fac n)) = (k (* n (fac (- n 1))) = (kfac (- n 1) (lambda (v) (k (* n v)))) (define (kfac n k) ;; n * k = function of one arg (if (= 0 n) (k 1) (kfac (- n 1) (lambda (v) (k (* n v)))))) 92

93 How computation works.. (+ 3 (* 4 (+ 5 6))) first results in 11 then * 4 then + 3 Once (+ 5 6) is evaluated the rest of the computation to continue is * 4 and

94 Contexts A context is a procedure of one variable [] (hole) How to create a context? Two steps: - replace expression by [] - form a lambda (+ 3 (* 4 (+ 5 6))) context of (+ 5 6) = (lambda ([]) (+ 3 ( * 4 []))) 94

95 Contexts (ii) Refined two Steps - replace expression by [] and evaluate it as much as we can - then we form a lambda (if (zero? 5) (+ 3 (* 4 (+ 5 6))) (* (+ (* 3 4) 5) 2)))) Context of (* 3 4) is (lambda ([]) (* (+ [] 5) 2)) 95

96 Context of (* 3 4) (let ((n 1)) (if (zero? n) (writeln (+ 3 (* 4 (+ 5 6)))) (writeln (* (+ (* 3 4) 5) 2))) n) is (lambda ([]) (begin (writeln (* (+ [] 5) 2) n) with the closure environment having n bound to 1 96

97 Execute... (define (mapadd l) (if (null? l) (cons (+ 3 (* 4 5)) '()) (cons (+ 1 (car l)) (mapadd (cdr l))))) (mapadd '(1 3 5)) > ( ) Context of (* 4 5) in (cons 0 (mapadd (1 3 5)))? (lambda ([]) (cons 0 (cons 2 (cons 4 (cons 6 (cons (+ 3 []) ())))))) 97

98 Roadmap Context Escaper Continuation 98

99 Escape Procedures Yields a value but never passes that value to others. The value of an escape procedures is the value of the entire computation Anything awaiting its result is ignored (+ (escape-* 5 2) 3) > 10 (* 100 (+ 30 (escape-* 5 2))) > 10 99

100 Escaper (+ ((escaper (lambda (x) ((escaper -) ((escaper *) x 3) 7))) 5) 4) >

101 Roadmap Context Escaper Continuation 101

102 Continuation (...(call/cc (lambda (k)...k...)...) We pass the rest of the computation, i.e., the context of (call/cc..) as an escaper to k 102

103 Continuation Evaluation (1) form the context of (call/cc cont) (lambda []...) (2) create an escaper (escaper (lambda []...) (3) pass (escaper (lambda []...) to cont where cont = (lambda (k)...) If cont uses the escaper k then it escapes! Else the normal value mechanism is applied 103

104 Example (+ 3 (* 4 (call/cc (lambda (k)...))) Context of (call/cc...) (lambda ([]) (+ 3 (* 4 []))) We have then (+3 (* 4 ((lambda (k)...) (escaper (lambda ([]) (+ 3 (* 4 []))))) The context of call/cc is escaped and passed as k 104

105 Call/cc (call-with-current-continuation proc) Proc must be a procedure of one argument. The procedure call-with-currentcontinuation packages up the current continuation as an escape procedure and passes it as an argument to proc. The escape procedure is a Scheme procedure that, if it is later called, will abandon whatever continuation is in effect at that later time and will instead use the continuation that was in effect when the escape procedure was created. [...] The escape procedure that is passed to proc has unlimited extent just like any other procedure in Scheme. It may be stored in variables or data structures and may be called as many times as desired. 105

106 Example (call/cc (lambda (k) (+ 2 (* 7 (k 3)))) > 3 k = (escaper (lambda ([]) [])) (+ 1 (call/cc (lambda (k) (+ 2 3)))) > 6 k = (escaper (lambda ([]) (+ 1 []))) but k not invoked (+ 1 (call/cc (lambda (k) (+ 2 (k 3))))) > 4 k = (escaper (lambda ([]) (+ 1 []))) = (lambda^ ([]) (+ 1 []))) k invoked 106

107 Escaping on Error (define (product l) (call/cc (lambda (exit) (letrec ((proaux (lambda (l) (cond ((null? l) 1) ((not (number? (car l))) (exit 'error)) ((zero? (car l)) (exit 0)) (else (* (car l) (proaux (cdr l)))))))) (proaux l))))) (product '(42 27 q )) > error (+ 3 (product '(42 27 q ))) >+: expects type <number> as 2nd argument, given: erreur; other arguments were: 3 107

Scheme. Functional Programming. Lambda Calculus. CSC 4101: Programming Languages 1. Textbook, Sections , 13.7

Scheme Textbook, Sections 13.1 13.3, 13.7 1 Functional Programming Based on mathematical functions Take argument, return value Only function call, no assignment Functions are first-class values E.g., functions

Organization of Programming Languages CS3200/5200N. Lecture 11

Organization of Programming Languages CS3200/5200N Razvan C. Bunescu School of Electrical Engineering and Computer Science bunescu@ohio.edu Functional vs. Imperative The design of the imperative languages

Functional Programming. Pure Functional Languages

Functional Programming Pure functional PLs S-expressions cons, car, cdr Defining functions read-eval-print loop of Lisp interpreter Examples of recursive functions Shallow, deep Equality testing 1 Pure

A Brief Introduction to Scheme (II)

A Brief Introduction to Scheme (II) Philip W. L. Fong pwlfong@cs.uregina.ca Department of Computer Science University of Regina Regina, Saskatchewan, Canada Lists Scheme II p.1/29 Lists Aggregate data

SCHEME 7. 1 Introduction. 2 Primitives COMPUTER SCIENCE 61A. October 29, 2015

SCHEME 7 COMPUTER SCIENCE 61A October 29, 2015 1 Introduction In the next part of the course, we will be working with the Scheme programming language. In addition to learning how to write Scheme programs,

Scheme Quick Reference

Scheme Quick Reference COSC 18 Fall 2003 This document is a quick reference guide to common features of the Scheme language. It is not intended to be a complete language reference, but it gives terse summaries

Scheme: Data. CS F331 Programming Languages CSCE A331 Programming Language Concepts Lecture Slides Monday, April 3, Glenn G.

Scheme: Data CS F331 Programming Languages CSCE A331 Programming Language Concepts Lecture Slides Monday, April 3, 2017 Glenn G. Chappell Department of Computer Science University of Alaska Fairbanks ggchappell@alaska.edu

Scheme: Strings Scheme: I/O

Scheme: Strings Scheme: I/O CS F331 Programming Languages CSCE A331 Programming Language Concepts Lecture Slides Wednesday, April 5, 2017 Glenn G. Chappell Department of Computer Science University of

CS61A Discussion Notes: Week 11: The Metacircular Evaluator By Greg Krimer, with slight modifications by Phoebus Chen (using notes from Todd Segal)

CS61A Discussion Notes: Week 11: The Metacircular Evaluator By Greg Krimer, with slight modifications by Phoebus Chen (using notes from Todd Segal) What is the Metacircular Evaluator? It is the best part

Scheme as implemented by Racket

Scheme as implemented by Racket (Simple view:) Racket is a version of Scheme. (Full view:) Racket is a platform for implementing and using many languages, and Scheme is one of those that come out of the

;;; Determines if e is a primitive by looking it up in the primitive environment. ;;; Define indentation and output routines for the output for

Page 1/11 (require (lib "trace")) Allow tracing to be turned on and off (define tracing #f) Define a string to hold the error messages created during syntax checking (define error msg ""); Used for fancy

Fall 2017 Discussion 7: October 25, 2017 Solutions. 1 Introduction. 2 Primitives

CS 6A Scheme Fall 207 Discussion 7: October 25, 207 Solutions Introduction In the next part of the course, we will be working with the Scheme programming language. In addition to learning how to write

CS 480. Lisp J. Kosecka George Mason University. Lisp Slides

CS 480 Lisp J. Kosecka George Mason University Lisp Slides Symbolic Programming Symbols: +, -, 1, 2 etc. Symbolic expressions: (+ 1 2), (+ (* 3 4) 2) Symbolic programs are programs that manipulate symbolic

How to Design Programs Languages

How to Design Programs Languages Version 4.1 August 12, 2008 The languages documented in this manual are provided by DrScheme to be used with the How to Design Programs book. 1 Contents 1 Beginning Student

Project 2: Scheme Interpreter

Project 2: Scheme Interpreter CSC 4101, Fall 2017 Due: 12 November 2017 For this project, you will implement a simple Scheme interpreter in C++ or Java. Your interpreter should be able to handle the same

Essentials of Programming Languages Language

Essentials of Programming Languages Language Version 6.90.0.26 April 20, 2018 The Essentials of Programming Languages language in DrRacket provides a subset of functions and syntactic forms of racket mostly

Programming Languages. Function-Closure Idioms. Adapted from Dan Grossman's PL class, U. of Washington

Programming Languages Function-Closure Idioms Adapted from Dan Grossman's PL class, U. of Washington More idioms We know the rule for lexical scope and function closures Now what is it good for A partial

Pattern Matching for Scheme

Pattern Matching for Scheme Andrew K. Wright March 1996 Department of Computer Science MS 132 Rice University 6100 Main Street Houston, Texas 77005-1892 Contents 1 Match 1 1.1 Definition... 1 1.1.1 Patterns...

Racket. CSE341: Programming Languages Lecture 14 Introduction to Racket. Getting started. Racket vs. Scheme. Example.

Racket Next 2+ weeks will use the Racket language (not ML) and the DrRacket programming environment (not emacs) Installation / basic usage instructions on course website CSE34: Programming Languages Lecture

Building a system for symbolic differentiation

Computer Science 21b Structure and Interpretation of Computer Programs Building a system for symbolic differentiation Selectors, constructors and predicates: (constant? e) Is e a constant? (variable? e)

Racket: Modules, Contracts, Languages

Racket: Modules, Contracts, Languages Advanced Functional Programming Jean-Noël Monette November 2013 1 Today Modules are the way to structure larger programs in smaller pieces. Modules can import and

Project 5 - The Meta-Circular Evaluator

MASSACHVSETTS INSTITVTE OF TECHNOLOGY Department of Electrical Engineering and Computer Science 6.001 Structure and Interpretation of Computer Programs Spring Semester, 2005 Project 5 - The Meta-Circular

(Func&onal (Programming (in (Scheme)))) Jianguo Lu

(Func&onal (Programming (in (Scheme)))) Jianguo Lu 1 Programming paradigms Func&onal No assignment statement No side effect Use recursion Logic OOP AOP 2 What is func&onal programming It is NOT what you

Scheme Basics > (butfirst '(help!)) ()

Scheme Basics > (butfirst '(help!)) () [The butfirst of a *sentence* containing one word is all but that word, i.e., the empty sentence. (BUTFIRST 'HELP!) without the inner parentheses would be butfirst

Project 5 - The Meta-Circular Evaluator

MASSACHVSETTS INSTITVTE OF TECHNOLOGY Department of Electrical Engineering and Computer Science 6.001 Structure and Interpretation of Computer Programs Fall Semester, 2005 Project 5 - The Meta-Circular

Normal Order (Lazy) Evaluation SICP. Applicative Order vs. Normal (Lazy) Order. Applicative vs. Normal? How can we implement lazy evaluation?

Normal Order (Lazy) Evaluation Alternative models for computation: Normal (Lazy) Order Evaluation Memoization Streams Applicative Order: evaluate all arguments, then apply operator Normal Order: pass unevaluated

Intro. Scheme Basics. scm> 5 5. scm>

Intro Let s take some time to talk about LISP. It stands for LISt Processing a way of coding using only lists! It sounds pretty radical, and it is. There are lots of cool things to know about LISP; if

Vectors in Scheme. Data Structures in Scheme

Data Structures in Scheme Vectors in Scheme In Scheme, lists and S-expressions are basic. Arrays can be simulated using lists, but access to elements deep in the list can be slow (since a list is a linked

MetacircularScheme! (a variant of lisp)

MetacircularScheme! (a variant of lisp) Lisp = Beauty Passed on through ages Basic Expressions (function arg1 arg2 ) To evaluate an expression, apply the functionto the arguments. (+ 1 2)? => 3 (sqrt4)?

CIS4/681 { Articial Intelligence 2 > (insert-sort '( )) ( ) 2 More Complicated Recursion So far everything we have dened requires

1 A couple of Functions 1 Let's take another example of a simple lisp function { one that does insertion sort. Let us assume that this sort function takes as input a list of numbers and sorts them in ascending

Teach Yourself Scheme in Fixnum Days c Dorai Sitaram, 1998 2004 All Rights Reserved ds26 at gte.com Contents Preface, 2 1 Enter Scheme, 3 2 Data types, 5 2.1 Simple data types, 6 2.1.1 Booleans, 6 2.1.2

Functional abstraction. What is abstraction? Eating apples. Readings: HtDP, sections Language level: Intermediate Student With Lambda

Functional abstraction Readings: HtDP, sections 19-24. Language level: Intermediate Student With Lambda different order used in lecture section 24 material introduced much earlier sections 22, 23 not covered

Announcement. Overview. LISP: A Quick Overview. Outline of Writing and Running Lisp.

Overview Announcement Announcement Lisp Basics CMUCL to be available on sun.cs. You may use GNU Common List (GCL http://www.gnu.org/software/gcl/ which is available on most Linux platforms. There is also

A Brief Introduction to Scheme (I)

A Brief Introduction to Scheme (I) Philip W. L. Fong pwlfong@cs.uregina.ca Department of Computer Science University of Regina Regina, Saskatchewan, Canada Scheme Scheme I p.1/44 Scheme: Feature Set A

ALISP interpreter in Awk

ALISP interpreter in Awk Roger Rohrbach 1592 Union St., #94 San Francisco, CA 94123 January 3, 1989 ABSTRACT This note describes a simple interpreter for the LISP programming language, written in awk.

MORE SCHEME. 1 What Would Scheme Print? COMPUTER SCIENCE MENTORS 61A. October 30 to November 3, Solution: Solutions begin on the following page.

MORE SCHEME COMPUTER SCIENCE MENTORS 61A October 30 to November 3, 2017 1 What Would Scheme Print? Solutions begin on the following page. 1. What will Scheme output? Draw box-and-pointer diagrams to help

Ruby: Introduction, Basics

Ruby: Introduction, Basics Computer Science and Engineering College of Engineering The Ohio State University Lecture 4 Ruby vs Java: Similarities Imperative and object-oriented Classes and instances (ie

Program Fundamentals

Program Fundamentals /* HelloWorld.java * The classic Hello, world! program */ class HelloWorld { public static void main (String[ ] args) { System.out.println( Hello, world! ); } } /* HelloWorld.java

Common Lisp. Blake McBride

Contents Common Lisp Blake McBride (blake@mcbride.name) 1 Data Types 2 2 Numeric Hierarchy 3 3 Comments 3 4 List Operations 4 5 Evaluation and Quotes 5 6 String Operations 5 7 Predicates 6 8 Math Predicates

Name EID. (calc (parse '{+ {with {x {+ 5 5}} {with {y {- x 3}} {+ y y} } } z } ) )

CS 345 Spring 2010 Midterm Exam Name EID 1. [4 Points] Circle the binding instances in the following expression: (calc (parse '+ with x + 5 5 with y - x 3 + y y z ) ) 2. [7 Points] Using the following

Interpreters and Tail Calls Fall 2017 Discussion 8: November 1, 2017 Solutions. 1 Calculator. calc> (+ 2 2) 4

CS 61A Interpreters and Tail Calls Fall 2017 Discussion 8: November 1, 2017 Solutions 1 Calculator We are beginning to dive into the realm of interpreting computer programs that is, writing programs that

Lecture Notes on Lisp A Brief Introduction

Why Lisp? Lecture Notes on Lisp A Brief Introduction Because it s the most widely used AI programming language Because Prof Peng likes using it Because it s good for writing production software (Graham

Class 6: Efficiency in Scheme

Class 6: Efficiency in Scheme SI 413 - Programming Languages and Implementation Dr. Daniel S. Roche United States Naval Academy Fall 2011 Roche (USNA) SI413 - Class 6 Fall 2011 1 / 10 Objects in Scheme

Begin at the beginning

Begin at the beginning Expressions (Syntax) Exec-time Dynamic Values (Semantics) Compile-time Static Types 1. Programmer enters expression 2. ML checks if expression is well-typed Using a precise set of

Code example: sfact SICP Explicit-control evaluator. Example register machine: instructions. Goal: a tail-recursive evaluator.

6.001 SICP Explicit-control evaluator Big ideas: how to connect evaluator to machine instructions how to achieve tail recursion Obfuscation: tightly optimized instruction sequence Background eval-dispatch

Common LISP-Introduction

Common LISP-Introduction 1. The primary data structure in LISP is called the s-expression (symbolic expression). There are two basic types of s-expressions: atoms and lists. 2. The LISP language is normally

Programming Languages Third Edition. Chapter 7 Basic Semantics

Programming Languages Third Edition Chapter 7 Basic Semantics Objectives Understand attributes, binding, and semantic functions Understand declarations, blocks, and scope Learn how to construct a symbol

CSc 520 Principles of Programming Languages. Examining Lists. Constructing Lists... 7: Scheme List Processing

Constructing Lists CSc 520 Principles of Programming Languages 7: Scheme List Processing Christian Collberg collberg@cs.arizona.edu Department of Computer Science University of Arizona The most important

STREAMS 10. Basics of Streams. Practice with Streams COMPUTER SCIENCE 61AS. 1. What is a stream? 2. How does memoization work?

STREAMS 10 COMPUTER SCIENCE 61AS Basics of Streams 1. What is a stream? 2. How does memoization work? 3. Is a cons-stream a special form? Practice with Streams 1. Define a procedure (ones) that, when run

Ruby: Introduction, Basics

Ruby: Introduction, Basics Computer Science and Engineering College of Engineering The Ohio State University Lecture 4 Ruby vs Java: Similarities Imperative and object-oriented Classes and instances (ie

A LISP Interpreter in ML

UNIVERSITY OF OSLO Department of Informatics A LISP Interpreter in ML Mandatory Assignment 1 INF3110 September 21, 2009 Contents 1 1 Introduction The purpose of this assignment is to write an interpreter,

Konzepte von Programmiersprachen

Konzepte von Programmiersprachen Chapter 5: Continuation-Passing Interpreters Stefan Wehr Universität Freiburg 8. Juni 2009 Konzepte von Programmiersprachen 1 / 43 Motivation Continuations: abstraction

Sprite an animation manipulation language Language Reference Manual

Sprite an animation manipulation language Language Reference Manual Team Leader Dave Smith Team Members Dan Benamy John Morales Monica Ranadive Table of Contents A. Introduction...3 B. Lexical Conventions...3

9 Objects and Classes

9 Objects and Classes Many programming tasks require the program to manage some piece of state through an interface. For example, a file system has internal state, but we access and modify that state only

Semantic Analysis. Outline. The role of semantic analysis in a compiler. Scope. Types. Where we are. The Compiler Front-End

Outline Semantic Analysis The role of semantic analysis in a compiler A laundry list of tasks Scope Static vs. Dynamic scoping Implementation: symbol tables Types Static analyses that detect type errors

STREAMS 10. Basics of Streams. Practice with Streams COMPUTER SCIENCE 61AS. 1. What is a stream?

STREAMS 10 COMPUTER SCIENCE 61AS Basics of Streams 1. What is a stream? A stream is an element and a promise to evaluate the rest of the stream. Streams are a clever idea that allows one to use sequence

6.001, Spring Semester, 1998, Final Exam Your Name: 2 Question 1 (12 points): Each of the parts below should be treated as independent. For each part,

1 MASSACHVSETTS INSTITVTE OF TECHNOLOGY Department of Electrical Engineering and Computer Science 6.001 Structure and Interpretation of Computer Programs Spring Semester, 1998, Final Exam Your Name: Open

The syntax and semantics of Beginning Student

The syntax and semantics of Beginning Student Readings: HtDP, Intermezzo 1 (Section 8). We are covering the ideas of section 8, but not the parts of it dealing with section 6/7 material (which will come

The syntax and semantics of Beginning Student

The syntax and semantics of Beginning Student Readings: HtDP, Intermezzo 1 (Section 8). We are covering the ideas of section 8, but not the parts of it dealing with section 6/7 material (which will come

6.001 Recitation 23: Register Machines and Stack Frames

6.001 Recitation 23: Register achines and Stack Frames RI: Gerald Dalley, dalleyg@mit.edu, 8 ay 2007 http://people.csail.mit.edu/dalleyg/6.001/sp2007/ iscellany apply: See the IT Scheme documentation for

JScheme : A Scheme Interpreter Embedded Within Java Source Code

JScheme : A Scheme Interpreter Embedded Within Java Source Code CPSC 511 Term Project by Jeff Sember Abstract Mixing two or more programming languages together within a single project can be nontrivial,

Syntax: Meta-Programming Helpers

Syntax: Meta-Programming Helpers Version 5.0.1 August 3, 2010 1 Contents 1 Syntax Object Helpers 5 1.1 Deconstructing Syntax Objects........................ 5 1.2 Matching Fully-Expanded Expressions....................

1998 Midterm and Solutions

6.821 Programming Languages Handout Fall 2002 MASSACHVSETTS INSTITVTE OF TECHNOLOGY Department of Electrical Engineering and Compvter Science 1998 Midterm and Solutions There are four problems on this

JME Language Reference Manual

JME Language Reference Manual 1 Introduction JME (pronounced jay+me) is a lightweight language that allows programmers to easily perform statistic computations on tabular data as part of data analysis.

Introduction to Typed Racket. The plan: Racket Crash Course Typed Racket and PL Racket Differences with the text Some PL Racket Examples

Introduction to Typed Racket The plan: Racket Crash Course Typed Racket and PL Racket Differences with the text Some PL Racket Examples Getting started Find a machine with DrRacket installed (e.g. the

Review Analyzing Evaluator. CS61A Lecture 25. What gets returned by mc-eval? (not analyzing eval) REVIEW What is a procedure?

2 1 Review Analyzing Evaluator CS61A Lecture 2011-08-02 Colleen Lewis What s look like What the output of analyze was Fact: The body of a lambda gets analyzed! We can give names to analyzed lambdas What

Funk Programming Language Reference Manual

Funk Programming Language Reference Manual Naser AlDuaij, Senyao Du, Noura Farra, Yuan Kang, Andrea Lottarini {nya2102, sd2693, naf2116, yjk2106, al3125} @columbia.edu 26 October, 2012 1 Introduction This

# true;; - : bool = true. # false;; - : bool = false 9/10/ // = {s (5, "hi", 3.2), c 4, a 1, b 5} 9/10/2017 4

Booleans (aka Truth Values) Programming Languages and Compilers (CS 421) Sasa Misailovic 4110 SC, UIUC https://courses.engr.illinois.edu/cs421/fa2017/cs421a # true;; - : bool = true # false;; - : bool

Resources matter. Orders of Growth of Processes. R(n)= (n 2 ) Orders of growth of processes. Partial trace for (ifact 4) Partial trace for (fact 4)

Orders of Growth of Processes Today s topics Resources used by a program to solve a problem of size n Time Space Define order of growth Visualizing resources utilization using our model of evaluation Relating

Recursive Functions of Symbolic Expressions and Their Application, Part I

Recursive Functions of Symbolic Expressions and Their Application, Part I JOHN MCCARTHY Review: Amit Kirschenbaum Seminar in Programming Languages Recursive Functions of Symbolic Expressions and Their

mk-convert Contents 1 Converting to minikanren, quasimatically. 08 July 2014

mk-convert 08 July 2014 Contents 1 Converting to minikanren, quasimatically. 1 1.1 Variations on a Scheme..................... 2 1.2 Racket to minikanren, nally.................. 8 1.3 Back to the beginning......................

Type Conversion. and. Statements

and Statements Type conversion changing a value from one type to another Void Integral Floating Point Derived Boolean Character Integer Real Imaginary Complex no fractional part fractional part 2 tj Suppose

An informal tutorial on Joy 1

An informal tutorial on Joy 1 Manfred von Thun Abstract: Joy is a functional programming language which is not based on the application of functions to arguments but on the composition of functions. It

CS251 Programming Languages Handout # 29 Prof. Lyn Turbak March 7, 2007 Wellesley College

CS5 Programming Languages Handout # 9 Prof. Lyn Turbak March, 00 Wellesley College Postfix: A Simple Stack Language Several exercises and examples in this course will involve the Postfix mini-language.

CHAD Language Reference Manual INTRODUCTION The CHAD programming language is a limited purpose programming language designed to allow teachers and students to quickly code algorithms involving arrays,

Defining Program Syntax. Chapter Two Modern Programming Languages, 2nd ed. 1

Defining Program Syntax Chapter Two Modern Programming Languages, 2nd ed. 1 Syntax And Semantics Programming language syntax: how programs look, their form and structure Syntax is defined using a kind

Short Notes of CS201

#includes: Short Notes of CS201 The #include directive instructs the preprocessor to read and include a file into a source code file. The file name is typically enclosed with < and > if the file is a system

Decaf Language Reference

Decaf Language Reference Mike Lam, James Madison University Fall 2016 1 Introduction Decaf is an imperative language similar to Java or C, but is greatly simplified compared to those languages. It will

CS61A Notes 02b Fake Plastic Trees. 2. (cons ((1 a) (2 o)) (3 g)) 3. (list ((1 a) (2 o)) (3 g)) 4. (append ((1 a) (2 o)) (3 g))

CS61A Notes 02b Fake Plastic Trees Box and Pointer Diagrams QUESTIONS: Evaluate the following, and draw a box-and-pointer diagram for each. (Hint: It may be easier to draw the box-and-pointer diagram first.)

Tail Recursion: Factorial. Begin at the beginning. How does it execute? Tail recursion. Tail recursive factorial. Tail recursive factorial

Begin at the beginning Epressions (Synta) Compile-time Static Eec-time Dynamic Types Values (Semantics) 1. Programmer enters epression 2. ML checks if epression is well-typed Using a precise set of rules,

Design Issues. Subroutines and Control Abstraction. Subroutines and Control Abstraction. CSC 4101: Programming Languages 1. Textbook, Chapter 8

Subroutines and Control Abstraction Textbook, Chapter 8 1 Subroutines and Control Abstraction Mechanisms for process abstraction Single entry (except FORTRAN, PL/I) Caller is suspended Control returns

Problem Set 4: Streams and Lazy Evaluation

Due Friday, March 24 Computer Science (1)21b (Spring Term, 2017) Structure and Interpretation of Computer Programs Problem Set 4: Streams and Lazy Evaluation Reading Assignment: Chapter 3, Section 3.5.

functional programming in Python, part 2

Programming Languages Week 2 functional programming in Python, part 2 College of Information Science and Engineering Ritsumeikan University review of part 1 eliminating assignment makes programs easier

Compositional Cutpoint Verification

Compositional Cutpoint Verification Eric Smith (Stanford University) Collaborators: David Dill (Stanford University) David Hardin (Rockwell Collins) Contact ewsmith@stanford.edu Background Based on A Symbolic

low and not larger than high. 18 points

CSE 330 Test 1 (1 point) Spring 015 Multiple Choice. Write your answer to the LEFT of each problem. 3 points each 1. Lisp was invented at: A. IBM B. MIT C. Netscape D. Stanford. In C++, what operator is

Allegro CL Certification Program

Allegro CL Certification Program Lisp Programming Series Level I Review David Margolies 1 Summary 1 A lisp session contains a large number of objects which is typically increased by user-created lisp objects

Concepts Review. 2. A program is the implementation of an algorithm in a particular computer language, like C and C++.

Concepts Review 1. An algorithm is a sequence of steps to solve a problem. 2. A program is the implementation of an algorithm in a particular computer language, like C and C++. 3. A flowchart is the graphical

CMSC330. Objects, Functional Programming, and lambda calculus

CMSC330 Objects, Functional Programming, and lambda calculus 1 OOP vs. FP Object-oriented programming (OOP) Computation as interactions between objects Objects encapsulate mutable data (state) Accessed

ENVIRONMENT DIAGRAMS AND RECURSION 2

ENVIRONMENT DIAGRAMS AND RECURSION 2 COMPUTER SCIENCE 61A February 4, 2016 1 Environment Diagrams An environment diagram keeps track of all the variables that have been defined and the values they are

How to Design Programs

How to Design Programs How to (in Racket): represent data variants trees and lists write functions that process the data See also http://www.htdp.org/ 1 Running Example: GUIs Pick a fruit: Apple Banana

Data types for mcrl2

Data types for mcrl2 Aad Mathijssen April 5, 2018 We provide a syntax for the standard data types of the mcrl2 language. This syntax is intended to be a practical mix between standard mathematical notation

Section 10: LISP to Scheme. Evolution of Software Languages

Section Evolution of Software Languages Theo D'Hondt Bachelor of Computer Science Faculty of Sciences and Bio-Engineering Sciences Vrije Universiteit Brussel Academic Year 2015-2016 Evolution of Software

Values and Variables 1 / 30

Values and Variables 1 / 30 Values 2 / 30 Computing Computing is any purposeful activity that marries the representation of some dynamic domain with the representation of some dynamic machine that provides

Lecture Outline. COOL operational semantics. Operational Semantics of Cool. Motivation. Lecture 13. Notation. The rules. Evaluation Rules So Far

Lecture Outline Operational Semantics of Cool Lecture 13 COOL operational semantics Motivation Notation The rules Prof. Aiken CS 143 Lecture 13 1 Prof. Aiken CS 143 Lecture 13 2 Motivation We must specify

7. Introduction to Denotational Semantics. Oscar Nierstrasz

7. Introduction to Denotational Semantics Oscar Nierstrasz Roadmap > Syntax and Semantics > Semantics of Expressions > Semantics of Assignment > Other Issues References > D. A. Schmidt, Denotational Semantics,

Thoughts on Assignment 4 Haskell: Flow of Control

Thoughts on Assignment 4 Haskell: Flow of Control CS F331 Programming Languages CSCE A331 Programming Language Concepts Lecture Slides Monday, February 27, 2017 Glenn G. Chappell Department of Computer

Lecture #2 Kenneth W. Flynn RPI CS

Outline Programming in Lisp Lecture #2 Kenneth W. Flynn RPI CS Items from last time Recursion, briefly How to run Lisp I/O, Variables and other miscellany Lists Arrays Other data structures Jin Li lij3@rpi.edu

Principles of Programming Languages

Principles of Programming Languages www.cs.bgu.ac.il/~ppl172 Collaboration and Management Dana Fisman Lesson 2 - Types with TypeScript 1 Types What are types in programming languages? What types are you