If you can't read please download the document
Upload
sathish316
View
655
Download
0
Embed Size (px)
Citation preview
2. Imperative to Functional
No Looping constructs
3. Scheme (dialect of Lisp)
list
4. (42 (foo bar)) s-expressions atom or list
5. (foo bar) 6. (42 (foo bar)) 7. car, cdr
8. ( foo bar baz ) 9. (car lat) 10. foo 11. (cdr lat) 12. ( bar baz ) 13. (car (cdr lat)) 14. bar 15. cons
16. ( baz ) 17. (cons bar (baz)) 18. ( bar baz ) 19. (consfoo ( bar baz ) ) 20. ( foo bar baz ) 21. Primitive functions
22. (null?foo ) is #f 23. (null? ( foo bar )) is #f atom?
24. (atom? ( foo bar )) is #f 25. (atom? ( quote () ) is #f eq?
26. (eq?foo bar ) is #f 27.
28. (member?oops( foo bar baz )) is #f 29. (member?baz( foo bar baz )) is #t
31. bar == baz is #f 32. (member? baz (baz)) 33. baz == baz is #t member? 34. member? ( definemember? ( lambda(a lat) ( cond (( null?lat) #f) (else (or ( eq?( carlat) a) (member? a ( cdrlat)))) ))) 35. remove
36. (foo baz) ( defineremove ( lambda(a lat) ( cond (( null?lat) (quote ())) (( eq?( carlat) a) ( cdrlat)) (else ( cons( carlat) (remove a ( cdrlat)))) ))) 37. insertR
38. (foo bar baz) ( defineinsertR ( lambda(new old lat) ( cond (( null?lat) (quote ())) (( eq?( carlat) old)( consold ( consnew ( cdrlat)))) (else ( cons( carlat) (insertR new old ( cdrlat)))) ))) 39. insertL
40. (foo baz bar) ( defineinsertL ( lambda(new old lat) ( cond (( null?lat) (quote ())) (( eq?( carlat) old)( consnew ( consold ( cdrlat)))) (else ( cons( carlat) (insertR new old ( cdrlat)))) ))) 41. insert ( defineinsert ( lambdaseq ( lambda(new old lat) ( cond (( null?lat) (quote ())) (( eq?( carlat) old)( seqnew old lat)) (else ( cons( carlat) (insertR new old ( cdrlat)))) )))) 42. insertR, insertL using HOF ( defineseqR ( lambdanew old lat ( consold ( consnew ( cdrlat))) )) ( defineseqL ( lambdanew old lat ( consnew ( consold ( cdrlat))) )) ( defineinsertR(insert seqR)) ( defineinsertL(insert seqR)) 43. Arithmetic
44. (add1 41) = 42 45. sub1 46. (sub1 43) = 42 47. zero? 48. (zero? 0) is #t 49. (zero? 42) is #f 50. Addition + 5 + 3 = 1 + (5 + 2) = 1 + 1 + (5 + 1) = 1 + 1 + 1 + (5 + 0) = 1 + 1 + 1 + 5 = 1 + 1 + 6 = 1 + 7 = 8 51. Addition + ( define+ ( lambda(n m) ( cond (( zero?m) n) (else ( add1(+ n (sub1 m)))) )))) 52. Multiplication X 5 * 3 = 5 + (5 * 2)= 5 + 5 + (5 * 1)= 5 + 5 + 5 + (5 * 0)= 5 + 5 + 5 + 0= 5 + 5 + 5= 5 + 10= 15 53. Multiplication X ( definex ( lambda(n m) ( cond (( zero?m) 0) (else (+ n (x n (sub1 m)))) )))) 54. Exponent ^ 5 ^ 3 = 5 x (5 ^ 2)= 5 x 5 x (5 ^ 1)= 5 x 5 x 5 x (5 ^ 0)= 5 x 5 x 5 x 1= 5 x 5 x 5= 5 x 25= 125 55. Exponent ^ ( define^ ( lambda(n m) ( cond (( zero?m) 1) (else (x n (^ n (sub1 m)))) )))) 56. Tuple addition
57. Tuple addition ( defineaddtup ( lambda(tup) ( cond (( null?tup) 0) (else (+ ( cartup) (addtup ( cdrtup)))) )))) 58. Questions? Further Reading