Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.
FunctionalPROGRAMMINGZhongke ChenPayPal RiskMonday, June 24, 13
My name’s Zhongke Chen(陈忠克)Python, C/C++ CoderI worked for Wenzhou University, VirtuosGames, EricssonI majored in EE (Mult...
Why Learn FP?Monday, June 24, 13
FP is no longer exclusive to Lisp, Haskell,Erlang, ...Monday, June 24, 13
FP is no longer exclusive to Lisp, Haskell,Erlang, ...Monday, June 24, 13
))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))...
How to learn Lisp - a new language?Monday, June 24, 13
Primitive ElementsMeans of CombinationMeans of AbstractionMonday, June 24, 13
• Primitives+ * 4 3.14• Combinations(+ 4 3.14 2.6)(* (+ 4 4) (+ 5 5))(IF (5 > 4) 5 4)• Abstractions(DEFINE A (* 5 5))(DEFI...
Exercise:1. average (x, y) = (x+y)/22. mean-square(x,y) = (x*x + y*y)/23. abs(x) = |x|Monday, June 24, 13
(DEFINE (AVERAGE x y)(/ (+ x y) 2))(DEFINE (MEAN-SQUARE x y)(AVERAGE (SQUARE x)(SQUARE y)))(DEFINE (ABS x)(IF (< x 0)(- x)...
Evaluation Order of MEAN-SQUARE(4, 6)?MEAN-SUQARE(4, 6)-> (AVERAGE (SQUARE 4) (SQUARE 6))-> (AVERAGE 16 (SQUARE 6))-> (AVE...
MEAN-SUQARE(4, 6)-> (AVERAGE (SQUARE 4) (SQUARE 6))-> (/ (+ (SQUARE 4) (SQUARE 6)) 2)-> (/ (+ (SQUARE 4) (SQUARE 6)) 2)-> ...
fibs = 0:1:zipWith (+) fibs (tail fibs)Infinite List (needs Lazy Evaluation)Monday, June 24, 13
More example:fact(n) = n!Monday, June 24, 13
(DEFINE (FACT n)(IF (= n 0)1(* n (FACT (- n 1))))) <- RecursionMonday, June 24, 13
(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)...
(DEFINE (FACT-IMPL n r)(IF (= n 0)r(FACT-IMPL (- n 1) (* n r))))(DEFINE (FACT n)(FACT-IMPL n 1))Tail Call OptimizationMond...
(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) (...
Final Examplesqrt(x)Monday, June 24, 13
Algorithmmake a guess Gimprove the guess by averaging G and x/Gkeep improving the guess until it’s goodenoughuse 1 as an i...
(DEFINE (TRY guess x)(IF (GOOD-ENOUGH? guess x)guess(TRY (IMPROVE guess x) x)))(DEFINE (SQRT x) (TRY 1 x))(DEFINE (IMPROVE...
(DEFINE (SQRT x)(DEFINE (IMPROVE guess) <- Closure(AVERAGE guess (/ x guess)))(DEFINE (GOOD-ENOUGH? guess) <- Closure(< (A...
Then how to calculate Cube root etc?We need higher level of abstraction!Monday, June 24, 13
Fixed-Point of function f:is the x that f(x) = xMonday, June 24, 13
Given fixed-point, how to calculate sqrt(x)?f(y) = (y+x/y)/2Monday, June 24, 13
(DEFINE (SQRT x)(FIXED-POINT(LAMBDA (y)(AVERAGE (/ x y) y))1))Monday, June 24, 13
(DEFINE (FIXED-POINT f guess)(DEFINE (CLOSE-ENOUGH? u v)(< (ABS (- u v)) 0.0001))(DEFINE (ITER OLD NEW)(IF (CLOSE-ENOUGH? ...
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
(DEFINE (NEWTON f guess)(DEFINE DF (DERIV f))(FIXED-POINT(LAMBDA (y) (- y (/ (f y)(DF y))))guess))(DEFINE DERIV(LAMBDA (f)...
(DEFINE (SQRT x)(NEWTON(lambda (y) (- (square y) x))1.0))Monday, June 24, 13
Covered:LambdaTail Call OptimizationLazy EvaluationClosureHigher Order FunctionNot Covered:CurryingContinuationPattern Mat...
Thanks!Monday, June 24, 13
Upcoming SlideShare
Loading in …5
×

Introduction to Functional Programming

468 views

Published on

Published in: Technology
  • Be the first to comment

  • Be the first to like this

Introduction to Functional Programming

  1. 1. FunctionalPROGRAMMINGZhongke ChenPayPal RiskMonday, June 24, 13
  2. 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. 3. Why Learn FP?Monday, June 24, 13
  4. 4. FP is no longer exclusive to Lisp, Haskell,Erlang, ...Monday, June 24, 13
  5. 5. FP is no longer exclusive to Lisp, Haskell,Erlang, ...Monday, June 24, 13
  6. 6. )))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))Monday, June 24, 13
  7. 7. How to learn Lisp - a new language?Monday, June 24, 13
  8. 8. Primitive ElementsMeans of CombinationMeans of AbstractionMonday, June 24, 13
  9. 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. 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. 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. 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. 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. 14. fibs = 0:1:zipWith (+) fibs (tail fibs)Infinite List (needs Lazy Evaluation)Monday, June 24, 13
  15. 15. More example:fact(n) = n!Monday, June 24, 13
  16. 16. (DEFINE (FACT n)(IF (= n 0)1(* n (FACT (- n 1))))) <- RecursionMonday, June 24, 13
  17. 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. 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. 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. 20. Final Examplesqrt(x)Monday, June 24, 13
  21. 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. 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. 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. 24. Then how to calculate Cube root etc?We need higher level of abstraction!Monday, June 24, 13
  25. 25. Fixed-Point of function f:is the x that f(x) = xMonday, June 24, 13
  26. 26. Given fixed-point, how to calculate sqrt(x)?f(y) = (y+x/y)/2Monday, June 24, 13
  27. 27. (DEFINE (SQRT x)(FIXED-POINT(LAMBDA (y)(AVERAGE (/ x y) y))1))Monday, June 24, 13
  28. 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. 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. 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. 31. (DEFINE (SQRT x)(NEWTON(lambda (y) (- (square y) x))1.0))Monday, June 24, 13
  32. 32. Covered:LambdaTail Call OptimizationLazy EvaluationClosureHigher Order FunctionNot Covered:CurryingContinuationPattern MatchingMonads...Monday, June 24, 13
  33. 33. Thanks!Monday, June 24, 13

×