1 / 23

PPL

PPL. Lecture 4 Slides by Yaron Gonen , based on slides by Daniel Deutch and lecture notes by Prof. Mira Balaban. Midterm 2010. (define foo (let((f (lambda(x ) (+ 1 x)))) (lambda(x) (f x)))). תרגמו את ביטוי ה- let לביטוי ה- anonymous lambda

ellman
Download Presentation

PPL

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. PPL Lecture 4 Slides by YaronGonen, based on slides by Daniel Deutch and lecture notes by Prof. Mira Balaban

  2. Midterm 2010 (define foo (let((f (lambda(x ) (+ 1 x)))) (lambda(x) (f x)))) • תרגמו את ביטוי ה-let לביטוי ה-anonymous lambda • מהו מס' ה-closure שיווצרו?

  3. Today: High-Order Procedures (continued) • Procedures as returned values • Delayed computation

  4. Procedures as Returned Values Number (+ x y y) [Num -> Num] (lambda (x) (+ x y y)) [Num -> [Num -> Num]] (lambda (y) (lambda (x) (+ x y y))) [Num -> Num] ((lambda (y) (lambda (x) (+ x y y))) 2) Number (((lambda (y) (lambda (x) (+ x y y))) 2) 5)

  5. Example: derive ;Signature: deriv(f dx) ;Type:[[Number -> Number]*Number -> [Number -> Number]] ;Example: for f(x)=x^3, the derivative is the function 3x^2, ;whose value at x=5 is 75. ;Tests: ((deriv cube 0.001) 5) ==> ~75 (define deriv (lambda (f dx) (lambda (x) (/ (- (f (+ x dx)) (f x)) dx))))

  6. Example: derive (define dx 0.001) (define deriv (lambda (f) (lambda (x) (/ (- (f (+ x dx)) (f x)) dx)))) >deriv #<proc(f)> >(deriv (lambda (x) (* x x x))) #<proc(x)> >((deriv (lambda (x) (* x x x))) 5) 75.015

  7. Compile Time vs. Runtime • More a question of ‘is it a closure already? Or do we need to evaluate this lambda expression?’ • When a closure depends on other closures, it is preferred that these auxiliary closures are created at compile time

  8. Compile Time vs Runtime (define sqr (lambda (x) (* x x))) (sqr 5) ((lambda (x) (* x x)) 5) Compile time Runtime

  9. Example: nth deriv reminder (define nth-deriv (lambda (f n) (lambda (x) (if (= n 0) (f x) ((nth-deriv (deriv f) (- n 1)) x))))) (define dx 0.001) (define deriv (lambda (f) (lambda (x) (/ (- (f (+ x dx)) (f x)) dx))))

  10. (define nth-deriv (lambda (f n) (lambda (x) (if (= n 0) (f x) ((nth-deriv (deriv f) (- n 1)) x))))) (define nth-deriv (lambda (f n) (if (= n 0) f (lambda (x) ((nth-deriv (deriv f) (- n 1)) x))))) (define nth-deriv (lambda (f n) (if (= n 0) f (nth-deriv (deriv f) (- n 1))))) (define nth-deriv (lambda (f n) (if (= n 0) f (deriv (nth-deriv f (- n 1)))))) >(define five-exp (lambda (x) (* x x x x x))) >(define fourth-deriv-of-five-exp (nth-deriv five-exp 4)) > fourth-deriv-of-five-exp #<proc(x)>

  11. Compile time vs Runtime • We will always prefer compile-time, but sometimes its not possile (remember f_helper ?)

  12. Delayed Computation • With lambda we can delay the computation. • We can abuse it to solve hard problems in an elegant way.

  13. and and or special forms • (and <e1> ... <en>) • (or <e1> ... <en>)

  14. Example (if condition consequence alternative) ==> (or (and condition consequence) alternative)

  15. Example > (define x 0) > (define y 6) > (or (and (zero? x) 100000) (/ y x)) 100000 But what about > (if (zero? x) #f #t) #f > (or (and (zero? x) #f) #t) #t

  16. Example • The fixed version: (if condition consequence alternative) ==> ((or (and condition (lambda () consequence)) (lambda () alternative)))

  17. Delayed Computation for obtaining Iterative Process • Reminder: recursion stores future computation • New method for making iteration of recursion using high-order procedures

  18. Recursive Factorial (define fact (lambda (n) (if (= n 0) 1 (* (fact (- n 1)) n))))

  19. Iterative Factorial (define fact-iter (lambda (n prod) (if (= n 0) prod (fact-iter (- n 1) (* n prod)))))

  20. Iterative Factorial with Delayed Computation (define fact$ (lambda (n cont) (if (= n 0) (cont 1) (fact$ (- n 1) (lambda (res) (cont (* n res)))))))

  21. (fact$ 2 (lambda (x) x)) (fact$ 1 (lambda (res) ((lambda (x) x) (* 2 res)))) (fact$ 0 (lambda (res) ((lambda (res) ((lambda (x) x) (* 2 res))) (* 1 res)))) ((lambda (res) ((lambda (res) ((lambda (x) x) (* 2 res))) (* 1 res))) 1) ((lambda (res) ((lambda (x) x) (* 2 res))) 1) ((lambda (x) x) 2) 2

More Related