Your SlideShare is downloading. ×
Introduction to Functional Programming
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×
Saving this for later? Get the SlideShare app to save on your phone or tablet. Read anywhere, anytime – even offline.
Text the download link to your phone
Standard text messaging rates apply

Introduction to Functional Programming

253
views

Published on

Published in: Technology

0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total Views
253
On Slideshare
0
From Embeds
0
Number of Embeds
0
Actions
Shares
0
Downloads
4
Comments
0
Likes
0
Embeds 0
No embeds

Report content
Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
No notes for slide

Transcript

  • 1. FunctionalPROGRAMMINGZhongke ChenPayPal RiskMonday, June 24, 13
  • 2. My name’s Zhongke Chen(陈忠克)Python, C/C++ CoderI worked for Wenzhou University, VirtuosGames, EricssonI majored in EE (Multimedia Analysis)Twitter, Sina Weibo: @ch3n2kMonday, June 24, 13
  • 3. Why Learn FP?Monday, June 24, 13
  • 4. FP is no longer exclusive to Lisp, Haskell,Erlang, ...Monday, June 24, 13
  • 5. FP is no longer exclusive to Lisp, Haskell,Erlang, ...Monday, June 24, 13
  • 6. )))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))Monday, June 24, 13
  • 7. How to learn Lisp - a new language?Monday, June 24, 13
  • 8. Primitive ElementsMeans of CombinationMeans of AbstractionMonday, June 24, 13
  • 9. • Primitives+ * 4 3.14• Combinations(+ 4 3.14 2.6)(* (+ 4 4) (+ 5 5))(IF (5 > 4) 5 4)• Abstractions(DEFINE A (* 5 5))(DEFINE SQUARE (LAMBDA (x) (* x x))) <- Lambda(DEFINE (SQAURE x) (* x x)) <- Syntactic SugarMonday, June 24, 13
  • 10. Exercise:1. average (x, y) = (x+y)/22. mean-square(x,y) = (x*x + y*y)/23. abs(x) = |x|Monday, June 24, 13
  • 11. (DEFINE (AVERAGE x y)(/ (+ x y) 2))(DEFINE (MEAN-SQUARE x y)(AVERAGE (SQUARE x)(SQUARE y)))(DEFINE (ABS x)(IF (< x 0)(- x)x))Monday, June 24, 13
  • 12. Evaluation Order of MEAN-SQUARE(4, 6)?MEAN-SUQARE(4, 6)-> (AVERAGE (SQUARE 4) (SQUARE 6))-> (AVERAGE 16 (SQUARE 6))-> (AVERAGE 16 36)-> 26Strict OrderMonday, June 24, 13
  • 13. MEAN-SUQARE(4, 6)-> (AVERAGE (SQUARE 4) (SQUARE 6))-> (/ (+ (SQUARE 4) (SQUARE 6)) 2)-> (/ (+ (SQUARE 4) (SQUARE 6)) 2)-> (/ (+ (* 4 4) (SQUARE 6)) 2)-> (/ (+ 16 (SQUARE 6)) 2)...Non-Strict Order (Lazy Evaluation)Monday, June 24, 13
  • 14. fibs = 0:1:zipWith (+) fibs (tail fibs)Infinite List (needs Lazy Evaluation)Monday, June 24, 13
  • 15. More example:fact(n) = n!Monday, June 24, 13
  • 16. (DEFINE (FACT n)(IF (= n 0)1(* n (FACT (- n 1))))) <- RecursionMonday, June 24, 13
  • 17. (FACT 3)->(IF (= 3 0) 1 (* 3 (FACT (- 3 1))))->(* 3 (FACT (- 3 1)))->(* 3 (FACT 2))->(* 3 (IF (= 2 0) 1 (* 2 (FACT (- 2 1)))))->(* 3 (* 2 (FACT 1)))->(* 3 (* 2 (* 1 (FACT 0))))->(* 3 (* 2 (* 1 1)))->(* 3 (* 2 1))->(* 3 2)->6Monday, June 24, 13
  • 18. (DEFINE (FACT-IMPL n r)(IF (= n 0)r(FACT-IMPL (- n 1) (* n r))))(DEFINE (FACT n)(FACT-IMPL n 1))Tail Call OptimizationMonday, June 24, 13
  • 19. (FACT 3)->(FACT-IMPL 3 1)->(IF (= 3 0) 1 (FACT-IMPL (- 3 1) (* 3 1)))->(FACT-IMPL 2 3)->(IF (= 2 0) 3 (FACT-IMPL (- 2 1) (* 2 3)))->(FACT-IMPL 1 6)->(IF (= 1 0) 6 (FACT-IMPL (- 1 1) (* 1 6)))->(FACT-IMPL 0 6)->(IF (= 0 0) 6 (FACT-IMPL (- 0 1) (* 0 6)))->6Monday, June 24, 13
  • 20. Final Examplesqrt(x)Monday, June 24, 13
  • 21. Algorithmmake a guess Gimprove the guess by averaging G and x/Gkeep improving the guess until it’s goodenoughuse 1 as an initial guessMonday, June 24, 13
  • 22. (DEFINE (TRY guess x)(IF (GOOD-ENOUGH? guess x)guess(TRY (IMPROVE guess x) x)))(DEFINE (SQRT x) (TRY 1 x))(DEFINE (IMPROVE guess x)(AVERAGE guess (/ x guess)))(DEFINE (GOOD-ENOUGH? guess x)(< (ABS (- (SQUARE guess) x))0.00001))Monday, June 24, 13
  • 23. (DEFINE (SQRT x)(DEFINE (IMPROVE guess) <- Closure(AVERAGE guess (/ x guess)))(DEFINE (GOOD-ENOUGH? guess) <- Closure(< (ABS (- (SQUARE guess) x))0.00001))(DEFINE (TRY guess)(IF (GOOD-ENOUGH? guess)guess(TRY (IMPROVE guess))))(TRY 1))Monday, June 24, 13
  • 24. Then how to calculate Cube root etc?We need higher level of abstraction!Monday, June 24, 13
  • 25. Fixed-Point of function f:is the x that f(x) = xMonday, June 24, 13
  • 26. Given fixed-point, how to calculate sqrt(x)?f(y) = (y+x/y)/2Monday, June 24, 13
  • 27. (DEFINE (SQRT x)(FIXED-POINT(LAMBDA (y)(AVERAGE (/ x y) y))1))Monday, June 24, 13
  • 28. (DEFINE (FIXED-POINT f guess)(DEFINE (CLOSE-ENOUGH? u v)(< (ABS (- u v)) 0.0001))(DEFINE (ITER OLD NEW)(IF (CLOSE-ENOUGH? OLD NEW)NEW(ITER NEW (f NEW))))(ITER guess (f guess)))Higher Order FunctionMonday, June 24, 13
  • 29. Newton’s method converges more rapidlyfind a y that f(y) = 0start a guess y0,yn+1 = yn - f(yn)/f’(yn)Monday, June 24, 13
  • 30. (DEFINE (NEWTON f guess)(DEFINE DF (DERIV f))(FIXED-POINT(LAMBDA (y) (- y (/ (f y)(DF y))))guess))(DEFINE DERIV(LAMBDA (f)(LAMBDA (x)(/ (- (f (+ x dx))(f x)) dx))))(DEFINE dx 0.00001)Monday, June 24, 13
  • 31. (DEFINE (SQRT x)(NEWTON(lambda (y) (- (square y) x))1.0))Monday, June 24, 13
  • 32. Covered:LambdaTail Call OptimizationLazy EvaluationClosureHigher Order FunctionNot Covered:CurryingContinuationPattern MatchingMonads...Monday, June 24, 13
  • 33. Thanks!Monday, June 24, 13

×