Presentation is loading. Please wait.

Presentation is loading. Please wait.

The Evolution of Programming Languages Day 2 Lecturer: Xiao Jia The Evolution of PLs1.

Similar presentations


Presentation on theme: "The Evolution of Programming Languages Day 2 Lecturer: Xiao Jia The Evolution of PLs1."— Presentation transcript:

1 The Evolution of Programming Languages Day 2 Lecturer: Xiao Jia xjia@cs.sjtu.edu.cn The Evolution of PLs1

2 The Functional Paradigm The Evolution of PLs2

3 High Order Functions zeroth order: only variables and constants first order: function invocations, but results and parameters are zeroth order n-th order: results and parameters are (n- 1)-th order high order: n >= 2 The Evolution of PLs3

4 LISP f(x, y)  (f x y) a + b  (+ a b) a – b – c  (- a b c) (cons head tail) (car (cons head tail))  head (cdr (cons head tail))  tail The Evolution of PLs4

5 It’s straightforward to build languages and systems “on top of” LISP (LISP is often used in this way) The Evolution of PLs5

6 Lambda f = λx.x 2  (lambda (x) (* x x)) ((lambda (x) (* x x)) 4)  16 The Evolution of PLs6

7 Dynamic Scoping int x = 4; f() { printf(“%d”, x); } main() { int x = 7; f(); } The Evolution of PLs7 Static Scoping Dynamic Scoping Describe a situation in which dynamic scoping is useful

8 Interpretation Defining car (cond ((eq (car expr) ’car) (car (cadr expr)) ) … The Evolution of PLs8

9 Scheme corrects some errors of LISP both simpler and more consistent (define factorial (lambda (n) (if (= n 0) 1 (* n (factorial (- n 1)))))) The Evolution of PLs9

10 Factorial with actors (define actorial (alpha (n c) (if (= n 0) (c 1) (actorial (- n 1) (alpha (f) (c (* f n))))))) The Evolution of PLs10

11 Static Scoping (define n 4) (define f (lambda () n)) (define n 7) (f) The Evolution of PLs11 LISP: 7 Scheme: 4

12 Example: Differentiating The Evolution of PLs12

13 Example: Differentiating The Evolution of PLs13 (define derive (lambda (f dx) (lambda (x) (/ (- (f (+ x dx)) (f x)) dx)))) (define square (lambda (x) (* x x))) (define Dsq (derive sq 0.001)) -> (Dsq 3) 6.001

14 SASL St. Andrew’s Symbolic Language The Evolution of PLs14

15 Lazy Evaluation nums(n) = n::nums(n+1) second (x::y::xs) = y second(nums(0)) = second(0::nums(1)) = second(0::1::nums(2)) = 1 The Evolution of PLs15 infinite list

16 Lazy Evaluation if x = 0 then 1 else 1/x In C: X && Y  if X then Y else false X || Y  if X then true else Y if (p != NULL && p->f > 0) … The Evolution of PLs16

17 Standard ML (SML) MetaLanguage The Evolution of PLs17

18 Function Composition - infix o; - fun (f o g) x = g (f x); val o = fn : (’a -> ’b) * (’b -> ’c) -> ’a -> ’c - val quad = sq o sq; val quad = fn : real -> real - quad 3.0; val it = 81.0 : real The Evolution of PLs18

19 List Generator infix --; fun (m -- n) = if m < n then m :: (m+1 -- n) else []; 1 -- 5  [1,2,3,4,5] : int list The Evolution of PLs19

20 Sum & Products fun sum [] = 0 | sum (x::xs) = x + sum xs; fun prod [] = 1 | prod (x::xs) = x * prod xs; sum (1 -- 5);  15 : int prod (1 -- 5);  120 : int The Evolution of PLs20

21 Declaration by cases fun fac n = if n = 0 then 1 else n * fac(n- 1); fun fac 0 = 1 | fac n = n * fac(n-1); The Evolution of PLs21


Download ppt "The Evolution of Programming Languages Day 2 Lecturer: Xiao Jia The Evolution of PLs1."

Similar presentations


Ads by Google