#reader(lib"read.ss""wxme")WXME0108 ## #| This file uses the GRacket editor format. Open this file in DrRacket version 6.4 or later to read it. Most likely, it was created by saving a program in DrRacket, and it probably contains a program with non-text elements (such as images or comment boxes). http://racket-lang.org/ |# 32 7 #"wxtext\0" 3 1 6 #"wxtab\0" 1 1 8 #"wximage\0" 2 0 8 #"wxmedia\0" 4 1 34 #"(lib \"syntax-browser.ss\" \"mrlib\")\0" 1 0 16 #"drscheme:number\0" 3 0 44 #"(lib \"number-snip.ss\" \"drscheme\" \"private\")\0" 1 0 36 #"(lib \"comment-snip.ss\" \"framework\")\0" 1 0 93 ( #"((lib \"collapsed-snipclass.ss\" \"framework\") (lib \"collapsed-sni" #"pclass-wxme.ss\" \"framework\"))\0" ) 0 0 43 #"(lib \"collapsed-snipclass.ss\" \"framework\")\0" 0 0 19 #"drscheme:sexp-snip\0" 0 0 36 #"(lib \"cache-image-snip.ss\" \"mrlib\")\0" 1 0 68 ( #"((lib \"image-core.ss\" \"mrlib\") (lib \"image-core-wxme.rkt\" \"mr" #"lib\"))\0" ) 1 0 29 #"drscheme:bindings-snipclass%\0" 1 0 101 ( #"((lib \"ellipsis-snip.rkt\" \"drracket\" \"private\") (lib \"ellipsi" #"s-snip-wxme.rkt\" \"drracket\" \"private\"))\0" ) 2 0 88 ( #"((lib \"pict-snip.rkt\" \"drracket\" \"private\") (lib \"pict-snip.r" #"kt\" \"drracket\" \"private\"))\0" ) 0 0 34 #"(lib \"bullet-snip.rkt\" \"browser\")\0" 0 0 25 #"(lib \"matrix.ss\" \"htdp\")\0" 1 0 22 #"drscheme:lambda-snip%\0" 1 0 29 #"drclickable-string-snipclass\0" 0 0 26 #"drracket:spacer-snipclass\0" 0 0 57 #"(lib \"hrule-snip.rkt\" \"macro-debugger\" \"syntax-browser\")\0" 1 0 26 #"drscheme:pict-value-snip%\0" 0 0 45 #"(lib \"image-snipr.ss\" \"slideshow\" \"private\")\0" 1 0 38 #"(lib \"pict-snipclass.ss\" \"slideshow\")\0" 2 0 55 #"(lib \"vertical-separator-snip.ss\" \"stepper\" \"private\")\0" 1 0 18 #"drscheme:xml-snip\0" 1 0 31 #"(lib \"xml-snipclass.ss\" \"xml\")\0" 1 0 21 #"drscheme:scheme-snip\0" 2 0 34 #"(lib \"scheme-snipclass.ss\" \"xml\")\0" 1 0 10 #"text-box%\0" 1 0 32 #"(lib \"text-snipclass.ss\" \"xml\")\0" 1 0 1 6 #"wxloc\0" 0 0 62 0 1 #"\0" 0 75 1 #"\0" 0 12 90 -1 90 -1 3 -1 0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 255 255 255 1 -1 0 9 #"Standard\0" 0 75 14 #"Operator Mono\0" 0 22 90 -1 90 -1 3 -1 0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 255 255 255 1 -1 2 1 #"\0" 0 -1 1 #"\0" 1 0 -1 -1 -1 -1 -1 -1 0 0 0 0 0 0 1 1 1 1 1 1 0 0 0 0 0 0 -1 -1 2 24 #"framework:default-color\0" 0 -1 1 #"\0" 1 0 -1 -1 -1 -1 -1 -1 0 0 0 0 0 1 0 0 0 0 0 0 59 117 140 255 255 255 -1 -1 2 1 #"\0" 0 -1 1 #"\0" 1 0 -1 -1 -1 -1 -1 -1 0 0 0 0 0 0 0 0 0 1 1 1 150 0 150 0 0 0 -1 -1 2 15 #"text:ports out\0" 0 -1 1 #"\0" 1 0 -1 -1 -1 -1 -1 -1 0 0 0 0 0 0 0 0 0 1 1 1 219 123 85 0 0 0 -1 -1 2 1 #"\0" 0 -1 1 #"\0" 1.0 0 -1 -1 93 -1 -1 -1 0 0 0 0 0 0 0 0 0 1.0 1.0 1.0 255 0 0 0 0 0 -1 -1 2 15 #"text:ports err\0" 0 -1 1 #"\0" 1 0 -1 -1 -1 -1 -1 -1 0 0 0 0 0 0 0 0 0 1 1 1 205 63 69 0 0 0 -1 -1 2 1 #"\0" 0 -1 1 #"\0" 1 0 -1 -1 -1 -1 -1 -1 0 0 0 0 0 0 0 0 0 1 1 1 0 0 175 0 0 0 -1 -1 2 17 #"text:ports value\0" 0 -1 1 #"\0" 1 0 -1 -1 -1 -1 -1 -1 0 0 0 0 0 0 0 0 0 1 1 1 85 181 219 0 0 0 -1 -1 2 1 #"\0" 0 -1 1 #"\0" 1.0 0 92 -1 -1 -1 -1 -1 0 0 0 0 0 0 0 0 0 1.0 1.0 1.0 34 139 34 0 0 0 -1 -1 2 27 #"Matching Parenthesis Style\0" 0 -1 1 #"\0" 1.0 0 92 -1 -1 -1 -1 -1 0 0 0 0 0 0 0 0 0 1.0 1.0 1.0 34 139 34 0 0 0 -1 -1 2 1 #"\0" 0 -1 1 #"\0" 1 0 -1 -1 -1 93 -1 -1 0 1 0 0 0 0 0 0 0 1 1 1 38 38 128 0 0 0 -1 -1 2 37 #"framework:syntax-color:scheme:symbol\0" 0 -1 1 #"\0" 1 0 90 -1 90 -1 -1 -1 0 0 0 0 0 0 0 0 0 1 1 1 85 181 219 0 0 0 -1 -1 2 38 #"framework:syntax-color:scheme:keyword\0" 0 -1 1 #"\0" 1 0 90 -1 90 -1 -1 -1 1 0 0 0 0 0 0 0 0 1 1 1 160 116 196 0 0 0 -1 -1 2 1 #"\0" 0 -1 1 #"\0" 1 0 -1 -1 -1 93 -1 -1 0 1 0 0 0 0 0 0 0 1 1 1 194 116 31 0 0 0 -1 -1 2 38 #"framework:syntax-color:scheme:comment\0" 0 -1 1 #"\0" 1 0 -1 -1 90 -1 -1 -1 0 0 0 0 0 0 0 0 0 1 1 1 123 147 155 0 0 0 -1 -1 2 1 #"\0" 0 -1 1 #"\0" 1 0 -1 -1 -1 93 -1 -1 0 1 0 0 0 0 0 0 0 1 1 1 41 128 38 0 0 0 -1 -1 2 37 #"framework:syntax-color:scheme:string\0" 0 -1 1 #"\0" 1 0 -1 -1 90 -1 -1 -1 0 0 0 0 0 0 0 0 0 1 1 1 159 202 86 0 0 0 -1 -1 2 35 #"framework:syntax-color:scheme:text\0" 0 -1 1 #"\0" 1 0 -1 -1 -1 -1 -1 -1 0 0 0 0 0 0 0 0 0 1 1 1 59 117 140 0 0 0 -1 -1 2 39 #"framework:syntax-color:scheme:constant\0" 0 -1 1 #"\0" 1 0 90 -1 90 -1 -1 -1 0 0 0 0 0 0 0 0 0 1 1 1 219 123 85 0 0 0 -1 -1 2 1 #"\0" 0 -1 1 #"\0" 1 0 -1 -1 -1 93 -1 -1 0 1 0 0 0 0 0 0 0 1 1 1 132 60 36 0 0 0 -1 -1 2 49 #"framework:syntax-color:scheme:hash-colon-keyword\0" 0 -1 1 #"\0" 1 0 -1 -1 -1 -1 -1 -1 0 0 0 0 0 0 0 0 0 1 1 1 85 219 190 0 0 0 -1 -1 2 42 #"framework:syntax-color:scheme:parenthesis\0" 0 -1 1 #"\0" 1 0 -1 -1 90 -1 -1 -1 0 0 0 0 0 0 0 0 0 1 1 1 65 83 91 0 0 0 -1 -1 2 1 #"\0" 0 -1 1 #"\0" 1 0 -1 -1 -1 93 -1 -1 0 1 0 0 0 0 0 0 0 1 1 1 255 0 0 0 0 0 -1 -1 2 36 #"framework:syntax-color:scheme:error\0" 0 -1 1 #"\0" 1 0 92 -1 -1 -1 -1 -1 0 0 0 0 0 0 0 0 0 1 1 1 205 63 69 0 0 0 -1 -1 2 1 #"\0" 0 -1 1 #"\0" 1 0 -1 -1 -1 93 -1 -1 0 1 0 0 0 0 0 0 0 1 1 1 0 0 0 0 0 0 -1 -1 2 36 #"framework:syntax-color:scheme:other\0" 0 -1 1 #"\0" 1 0 -1 -1 -1 -1 -1 -1 0 0 0 0 0 0 0 0 0 1 1 1 59 117 140 0 0 0 -1 -1 2 16 #"Misspelled Text\0" 0 -1 1 #"\0" 1 0 -1 -1 -1 -1 -1 -1 0 0 0 0 0 0 0 0 0 1 1 1 205 63 69 0 0 0 -1 -1 2 1 #"\0" 0 -1 1 #"\0" 1 0 -1 -1 -1 93 -1 -1 0 1 0 0 0 0 0 0 0 1 1 1 81 112 203 0 0 0 -1 -1 2 38 #"drracket:check-syntax:lexically-bound\0" 0 -1 1 #"\0" 1 0 -1 -1 90 -1 -1 -1 0 0 0 0 0 0 0 0 0 1 1 1 85 219 190 0 0 0 -1 -1 2 1 #"\0" 0 -1 1 #"\0" 1 0 -1 -1 -1 93 -1 -1 0 1 0 0 0 0 0 0 0 1 1 1 178 34 34 0 0 0 -1 -1 2 28 #"drracket:check-syntax:set!d\0" 0 -1 1 #"\0" 1 0 -1 -1 -1 -1 -1 -1 0 0 0 0 0 0 0 0 0 1 1 1 159 202 86 0 0 0 -1 -1 2 37 #"drracket:check-syntax:unused-require\0" 0 -1 1 #"\0" 1 0 -1 -1 -1 -1 -1 -1 0 0 0 0 0 0 0 0 0 1 1 1 205 63 69 0 0 0 -1 -1 2 36 #"drracket:check-syntax:free-variable\0" 0 -1 1 #"\0" 1 0 -1 -1 90 -1 -1 -1 0 0 0 0 0 0 0 0 0 1 1 1 160 116 196 0 0 0 -1 -1 2 1 #"\0" 0 -1 1 #"\0" 1 0 -1 -1 -1 93 -1 -1 0 1 0 0 0 0 0 0 0 1 1 1 68 0 203 0 0 0 -1 -1 2 31 #"drracket:check-syntax:imported\0" 0 -1 1 #"\0" 1 0 90 -1 90 -1 -1 -1 1 0 0 0 0 0 0 0 0 1 1 1 85 181 219 0 0 0 -1 -1 2 47 #"drracket:check-syntax:my-obligation-style-pref\0" 0 -1 1 #"\0" 1 0 -1 -1 -1 -1 -1 -1 0 0 0 0 0 0 0 0 0 1 1 1 219 123 85 0 0 0 -1 -1 2 1 #"\0" 0 -1 1 #"\0" 1 0 -1 -1 -1 93 -1 -1 0 1 0 0 0 0 0 0 0 1 1 1 0 116 0 0 0 0 -1 -1 2 50 #"drracket:check-syntax:their-obligation-style-pref\0" 0 -1 1 #"\0" 1 0 -1 -1 90 -1 -1 -1 0 0 0 0 0 0 0 0 0 1 1 1 159 202 86 0 0 0 -1 -1 2 48 #"drracket:check-syntax:unk-obligation-style-pref\0" 0 -1 1 #"\0" 1 0 -1 -1 -1 -1 -1 -1 0 0 0 0 0 0 0 0 0 1 1 1 205 63 69 0 0 0 -1 -1 2 1 #"\0" 0 -1 1 #"\0" 1 0 -1 -1 -1 93 -1 -1 0 1 0 0 0 0 0 0 0 1 1 1 139 142 28 0 0 0 -1 -1 2 49 #"drracket:check-syntax:both-obligation-style-pref\0" 0 -1 1 #"\0" 1 0 -1 -1 -1 -1 -1 -1 0 0 0 0 0 0 0 0 0 1 1 1 138 85 63 0 0 0 -1 -1 2 26 #"plt:htdp:test-coverage-on\0" 0 -1 1 #"\0" 1 0 -1 -1 -1 -1 -1 -1 0 0 0 0 0 0 0 0 0 1 1 1 159 202 86 0 0 0 -1 -1 2 1 #"\0" 0 -1 1 #"\0" 1 0 -1 -1 -1 93 -1 -1 0 1 0 0 0 1 0 0 0 0 0 0 255 165 0 0 0 0 -1 -1 2 27 #"plt:htdp:test-coverage-off\0" 0 -1 1 #"\0" 1 0 -1 -1 -1 -1 -1 -1 0 0 0 0 0 0 0 0 0 1 1 1 205 63 69 0 0 0 -1 -1 4 1 #"\0" 0 70 1 #"\0" 1.0 0 -1 -1 -1 -1 -1 -1 0 0 0 0 0 0 1.0 1.0 1.0 1.0 1.0 1.0 0 0 0 0 0 0 -1 -1 4 4 #"XML\0" 0 70 1 #"\0" 1.0 0 -1 -1 -1 -1 -1 -1 0 0 0 0 0 0 1.0 1.0 1.0 1.0 1.0 1.0 0 0 0 0 0 0 -1 -1 2 37 #"plt:module-language:test-coverage-on\0" 0 -1 1 #"\0" 1 0 -1 -1 -1 -1 -1 -1 0 0 0 0 0 0 0 0 0 1 1 1 159 202 86 0 0 0 -1 -1 2 38 #"plt:module-language:test-coverage-off\0" 0 -1 1 #"\0" 1 0 -1 -1 -1 -1 -1 -1 0 0 0 0 0 0 0 0 0 1 1 1 205 63 69 0 0 0 -1 -1 4 1 #"\0" 0 71 1 #"\0" 1.0 0 -1 -1 -1 -1 -1 -1 0 0 0 0 0 0 1.0 1.0 1.0 1.0 1.0 1.0 0 0 0 0 0 0 -1 -1 4 1 #"\0" 0 -1 1 #"\0" 1.0 0 -1 -1 -1 -1 -1 -1 1 0 0 0 0 0 0 0 0 1.0 1.0 1.0 0 0 255 0 0 0 -1 -1 4 1 #"\0" 0 71 1 #"\0" 1.0 0 -1 -1 -1 -1 -1 -1 1 0 0 0 0 0 0 0 0 1.0 1.0 1.0 0 0 255 0 0 0 -1 -1 4 1 #"\0" 0 71 1 #"\0" 1.0 0 -1 -1 -1 -1 -1 -1 0 0 0 0 0 0 0 0 0 1.0 1.0 1.0 0 100 0 0 0 0 -1 -1 0 1 #"\0" 0 -1 1 #"\0" 1.0 0 -1 -1 -1 -1 -1 -1 0 0 0 0 0 0 1.0 1.0 1.0 1.0 1.0 1.0 0 0 0 0 0 0 0 -1 17 1 #"\0" 0 -1 1 #"\0" 1.0 0 -1 -1 -1 -1 -1 -1 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 255 255 255 -1 -1 24 1 #"\0" 0 -1 1 #"\0" 1.0 0 -1 -1 -1 -1 -1 -1 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 255 255 255 -1 -1 4 1 #"\0" 0 -1 1 #"\0" 1.0 0 -1 -1 -1 -1 -1 -1 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 255 255 255 -1 -1 15 1 #"\0" 0 -1 1 #"\0" 1.0 0 -1 -1 -1 -1 -1 -1 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 255 255 255 -1 -1 44 1 #"\0" 0 -1 1 #"\0" 1.0 0 -1 -1 -1 -1 -1 -1 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 255 255 255 -1 -1 46 1 #"\0" 0 -1 1 #"\0" 1.0 0 -1 -1 -1 -1 -1 -1 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 255 255 255 -1 -1 0 686 0 4 3 85 ( #";; The first three lines of this file were inserted by DrRacket. The" #"y record metadata" ) 0 0 4 29 1 #"\n" 0 0 4 3 85 ( #";; about the language level of this file in a form that our tools ca" #"n easily process." ) 0 0 4 29 1 #"\n" 0 0 4 3 190 ( #"#reader(lib \"htdp-intermediate-lambda-reader.ss\" \"lang\")((modnam" #"e recursion) (read-case-sensitive #t) (teachpacks ()) (htdp-settings" #" #(#t constructor repeating-decimal #f #t none #f () #f)))" ) 0 0 4 29 1 #"\n" 0 0 17 3 26 #";;;;;;;;;;;;;;;;;;;;;;;;;;" 0 0 24 29 1 #"\n" 0 0 17 3 16 #"; how cons works" 0 0 24 29 1 #"\n" 0 0 17 3 26 #";;;;;;;;;;;;;;;;;;;;;;;;;;" 0 0 24 29 1 #"\n" 0 0 24 29 1 #"\n" 0 0 24 3 1 #"(" 0 0 15 3 6 #"define" 0 0 24 3 1 #" " 0 0 14 3 4 #"LIST" 0 0 24 3 2 #" (" 0 0 14 3 4 #"list" 0 0 24 3 1 #" " 0 0 21 3 1 #"1" 0 0 24 3 1 #" " 0 0 21 3 1 #"2" 0 0 24 3 1 #" " 0 0 21 3 1 #"3" 0 0 24 3 2 #"))" 0 0 24 29 1 #"\n" 0 0 24 29 1 #"\n" 0 0 17 3 2 #"; " 0 0 17 3 1 #"(" 0 0 17 3 4 #"list" 0 0 17 3 1 #" " 0 0 17 3 1 #"1" 0 0 17 3 1 #" " 0 0 17 3 1 #"2" 0 0 17 3 9 #" 3 empty)" 0 0 24 29 1 #"\n" 0 0 24 29 1 #"\n" 0 0 24 3 1 #"(" 0 0 14 3 5 #"first" 0 0 24 3 1 #" " 0 0 14 3 4 #"LIST" 0 0 24 3 3 #") " 0 0 17 3 3 #"; 1" 0 0 24 29 1 #"\n" 0 0 24 3 1 #"(" 0 0 14 3 4 #"rest" 0 0 24 3 1 #" " 0 0 14 3 4 #"LIST" 0 0 24 3 3 #") " 0 0 17 3 12 #"; (list 2 3)" 0 0 24 29 1 #"\n" 0 0 24 29 1 #"\n" 0 7 85 4 0 0 0 13 0 24 3 1 #"(" 0 0 14 3 4 #"cons" 0 0 24 3 2 #" (" 0 0 14 3 5 #"first" 0 0 24 3 1 #" " 0 0 14 3 4 #"LIST" 0 0 24 3 1 #")" 0 0 24 29 1 #"\n" 0 0 24 3 7 #" (" 0 0 14 3 4 #"rest" 0 0 24 3 1 #" " 0 0 14 3 4 #"LIST" 0 0 24 3 2 #"))" 0 0 0 0 24 29 1 #"\n" 0 0 24 29 1 #"\n" 0 0 24 3 1 #"(" 0 0 14 3 12 #"check-expect" 0 0 24 29 1 #"\n" 0 0 24 3 2 #" (" 0 0 14 3 4 #"cons" 0 0 24 3 1 #" " 0 0 21 3 1 #"1" 0 0 24 29 1 #"\n" 0 0 24 3 7 #" " 0 0 17 3 3 #"; (" 0 0 17 3 4 #"list" 0 0 17 3 5 #" 2 3)" 0 0 24 29 1 #"\n" 0 0 24 3 8 #" (" 0 0 14 3 4 #"cons" 0 0 24 3 1 #" " 0 0 21 3 1 #"2" 0 0 24 29 1 #"\n" 0 0 24 3 13 #" " 0 0 17 3 10 #"; (list 3)" 0 0 24 29 1 #"\n" 0 0 24 3 14 #" (" 0 0 14 3 4 #"cons" 0 0 24 3 1 #" " 0 0 21 3 1 #"3" 0 0 24 29 1 #"\n" 0 0 24 3 19 #" " 0 0 14 3 5 #"empty" 0 0 24 3 3 #")))" 0 0 24 29 1 #"\n" 0 0 24 3 2 #" (" 0 0 14 3 4 #"list" 0 0 24 3 1 #" " 0 0 21 3 1 #"1" 0 0 24 3 1 #" " 0 0 21 3 1 #"2" 0 0 24 3 1 #" " 0 0 21 3 1 #"3" 0 0 24 3 2 #"))" 0 0 24 29 1 #"\n" 0 0 24 29 1 #"\n" 0 0 17 3 35 #";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;" 0 0 24 29 1 #"\n" 0 0 17 3 26 #"; Recursion (general type)" 0 0 24 29 1 #"\n" 0 0 17 3 2 #"; " 0 0 24 29 1 #"\n" 0 0 17 3 8 #"; IDEAS:" 0 0 24 29 1 #"\n" 0 0 17 3 59 #"; 1. We use recursion to work with recursively-defined data" 0 0 24 29 1 #"\n" 0 0 17 3 47 #"; 2. then I give you some example templates idk" 0 0 24 29 1 #"\n" 0 0 17 3 35 #";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;" 0 0 24 29 1 #"\n" 0 0 24 29 1 #"\n" 0 0 17 3 41 #"; Think about recursive data definitions:" 0 0 24 29 1 #"\n" 0 0 24 29 1 #"\n" 0 0 17 3 20 #"; A Number is one of" 0 0 24 29 1 #"\n" 0 0 17 3 5 #"; - 0" 0 0 24 29 1 #"\n" 0 0 17 3 16 #"; - (+ 1 Number)" 0 0 24 29 1 #"\n" 0 0 24 29 1 #"\n" 0 0 17 3 27 #"; A Listof-String is one of" 0 0 24 29 1 #"\n" 0 0 17 3 9 #"; - empty" 0 0 24 29 1 #"\n" 0 0 17 3 31 #"; - (cons String Listof-String)" 0 0 24 29 1 #"\n" 0 0 24 29 1 #"\n" 0 7 121 58 0 0 0 19 0 24 3 1 #"(" 0 0 14 3 4 #"cons" 0 0 24 3 1 #" " 0 0 21 3 1 #"5" 0 0 24 3 1 #" " 0 0 14 3 5 #"empty" 0 0 24 3 1 #")" 0 0 24 29 1 #"\n" 0 0 24 3 1 #"(" 0 0 14 3 4 #"cons" 0 0 24 3 1 #" " 0 0 21 3 1 #"6" 0 0 24 3 2 #" (" 0 0 14 3 4 #"cons" 0 0 24 3 1 #" " 0 0 21 3 1 #"5" 0 0 24 3 1 #" " 0 0 14 3 5 #"empty" 0 0 24 3 2 #"))" 0 0 0 0 24 29 1 #"\n" 0 0 24 29 1 #"\n" 0 7 283 58 0 0 0 46 0 17 3 34 #"; A template for general recursion" 0 0 24 29 1 #"\n" 0 0 24 3 1 #"(" 0 0 15 3 6 #"define" 0 0 24 3 1 #" " 0 0 14 3 14 #"recursive-" 0 0 24 29 1 #"\n" 0 0 24 3 3 #" (" 0 0 15 3 6 #"lambda" 0 0 24 3 2 #" (" 0 0 14 3 1 #"x" 0 0 24 3 1 #")" 0 0 24 29 1 #"\n" 0 0 24 3 5 #" (" 0 0 14 3 2 #"if" 0 0 24 3 1 #" " 0 0 14 3 5 #"" 0 0 24 29 1 #"\n" 0 0 24 3 8 #" " 0 0 14 3 5 #"" 0 0 24 29 1 #"\n" 0 0 24 3 8 #" " 0 0 17 3 25 #"; if not base case, then " 0 0 17 3 14 #"Recursive Step" 0 0 24 29 1 #"\n" 0 0 24 3 9 #" (" 0 0 14 3 10 #"" 0 0 24 29 1 #"\n" 0 0 24 3 9 #" " 0 0 14 3 10 #"...current" 0 0 24 3 1 #" " 0 0 14 3 8 #"value..." 0 0 24 29 1 #"\n" 0 0 24 3 10 #" (" 0 0 14 3 14 #"recursive-" 0 0 24 3 1 #" " 0 0 14 3 7 #"...next" 0 0 24 3 1 #" " 0 0 14 3 8 #"value..." 0 0 24 3 5 #")))))" 0 0 0 0 24 29 1 #"\n" 0 0 24 29 1 #"\n" 0 7 313 4 0 0 0 51 0 17 3 33 #"; A template for number recursion" 0 0 24 29 1 #"\n" 0 0 24 3 1 #"(" 0 0 15 3 6 #"define" 0 0 24 3 1 #" " 0 0 14 3 21 #"recursive-number-" 0 0 24 29 1 #"\n" 0 0 24 3 3 #" (" 0 0 15 3 6 #"lambda" 0 0 24 3 2 #" (" 0 0 14 3 1 #"n" 0 0 24 3 1 #")" 0 0 24 29 1 #"\n" 0 0 24 3 5 #" (" 0 0 14 3 2 #"if" 0 0 24 29 1 #"\n" 0 0 24 3 5 #" " 0 0 17 3 18 #"; Base Case: n = 0" 0 0 24 29 1 #"\n" 0 0 24 3 6 #" (" 0 0 14 3 1 #"=" 0 0 24 3 1 #" " 0 0 14 3 1 #"n" 0 0 24 3 1 #" " 0 0 21 3 1 #"0" 0 0 24 3 1 #")" 0 0 24 29 1 #"\n" 0 0 24 3 5 #" " 0 0 17 3 41 #"; Base Case Result: usually either 0 or 1" 0 0 24 29 1 #"\n" 0 0 24 3 5 #" " 0 0 21 3 1 #"0" 0 0 24 29 1 #"\n" 0 0 24 3 5 #" " 0 0 17 3 16 #"; Recursive Step" 0 0 24 29 1 #"\n" 0 0 24 3 6 #" (" 0 0 14 3 4 #"" 0 0 24 29 1 #"\n" 0 0 24 3 6 #" " 0 0 14 3 7 #"...n..." 0 0 24 29 1 #"\n" 0 0 24 3 7 #" (" 0 0 14 3 21 #"recursive-number-" 0 0 24 3 2 #" (" 0 0 14 3 1 #"-" 0 0 24 3 1 #" " 0 0 14 3 1 #"n" 0 0 24 3 1 #" " 0 0 21 3 1 #"1" 0 0 24 3 6 #"))))))" 0 0 0 0 24 29 1 #"\n" 0 0 24 29 1 #"\n" 0 7 325 4 0 0 0 53 0 17 3 31 #"; A template for list recursion" 0 0 24 29 1 #"\n" 0 0 24 3 1 #"(" 0 0 15 3 6 #"define" 0 0 24 3 1 #" " 0 0 14 3 19 #"recursive-list-" 0 0 24 29 1 #"\n" 0 0 24 3 3 #" (" 0 0 15 3 6 #"lambda" 0 0 24 3 2 #" (" 0 0 14 3 3 #"lst" 0 0 24 3 1 #")" 0 0 24 29 1 #"\n" 0 0 24 3 5 #" (" 0 0 14 3 2 #"if" 0 0 24 29 1 #"\n" 0 0 24 3 5 #" " 0 0 17 3 23 #"; Base Case: empty list" 0 0 24 29 1 #"\n" 0 0 24 3 6 #" (" 0 0 14 3 6 #"empty?" 0 0 24 3 1 #" " 0 0 14 3 3 #"lst" 0 0 24 3 1 #")" 0 0 24 29 1 #"\n" 0 0 24 3 5 #" " 0 0 17 3 41 #"; Base Case Result: usually either 0 or 1" 0 0 24 29 1 #"\n" 0 0 24 3 5 #" " 0 0 21 3 1 #"0" 0 0 24 29 1 #"\n" 0 0 24 3 5 #" " 0 0 17 3 16 #"; Recursive Step" 0 0 24 29 1 #"\n" 0 0 24 3 6 #" (" 0 0 14 3 4 #"" 0 0 24 29 1 #"\n" 0 0 24 3 6 #" " 0 0 14 3 3 #"..." 0 0 24 3 1 #"(" 0 0 14 3 5 #"first" 0 0 24 3 1 #" " 0 0 14 3 3 #"lst" 0 0 24 3 1 #")" 0 0 14 3 3 #"..." 0 0 24 29 1 #"\n" 0 0 24 3 7 #" (" 0 0 14 3 19 #"recursive-list-" 0 0 24 3 2 #" (" 0 0 14 3 4 #"rest" 0 0 24 3 1 #" " 0 0 14 3 3 #"lst" 0 0 24 3 6 #"))))))" 0 0 0 0 24 29 1 #"\n" 0 0 24 29 1 #"\n" 0 0 17 3 42 #"; recursive-sum : Listof-Numbers -> number" 0 0 24 29 1 #"\n" 0 0 17 3 49 #"; returns the sum of all the elements in the list" 0 0 24 29 1 #"\n" 0 0 24 3 1 #"(" 0 0 15 3 6 #"define" 0 0 24 3 2 #" (" 0 0 14 3 13 #"recursive-sum" 0 0 24 3 1 #" " 0 0 14 3 3 #"lon" 0 0 24 3 1 #")" 0 0 24 29 1 #"\n" 0 0 24 3 3 #" (" 0 0 14 3 2 #"if" 0 0 24 3 2 #" (" 0 0 14 3 6 #"empty?" 0 0 24 3 1 #" " 0 0 14 3 3 #"lon" 0 0 24 3 1 #")" 0 0 24 29 1 #"\n" 0 0 24 3 6 #" " 0 0 21 3 1 #"0" 0 0 24 29 1 #"\n" 0 0 24 3 6 #" " 0 0 17 3 16 #"; Recursive step" 0 0 24 29 1 #"\n" 0 0 24 3 7 #" (" 0 0 14 3 1 #"+" 0 0 24 3 2 #" (" 0 0 14 3 5 #"first" 0 0 24 3 1 #" " 0 0 14 3 3 #"lon" 0 0 24 3 22 #") " 0 0 17 3 23 #"; (combiner (first lon)" 0 0 24 29 1 #"\n" 0 0 24 3 10 #" (" 0 0 14 3 13 #"recursive-sum" 0 0 24 3 2 #" (" 0 0 14 3 4 #"rest" 0 0 24 3 1 #" " 0 0 14 3 3 #"lon" 0 0 24 3 8 #")))))) " 0 0 17 3 30 #"; (recursive-fn (rest lon)))" 0 0 24 29 1 #"\n" 0 0 24 29 1 #"\n" 0 0 24 3 1 #"(" 0 0 14 3 13 #"recursive-sum" 0 0 24 3 2 #" (" 0 0 14 3 4 #"list" 0 0 24 3 1 #" " 0 0 21 3 1 #"1" 0 0 24 3 1 #" " 0 0 21 3 1 #"2" 0 0 24 3 1 #" " 0 0 21 3 1 #"3" 0 0 24 3 1 #" " 0 0 21 3 1 #"4" 0 0 24 3 2 #"))" 0 0 24 29 1 #"\n" 0 0 24 29 1 #"\n" 0 0 17 3 55 #";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;" 0 0 24 29 1 #"\n" 0 0 17 3 51 #"; Iterative Recursion (recursion with accumulators)" 0 0 24 29 1 #"\n" 0 0 17 3 2 #"; " 0 0 24 29 1 #"\n" 0 0 17 3 8 #"; IDEAS:" 0 0 24 29 1 #"\n" 0 0 17 3 61 #"; 1. Use accumulators to avoid leaving a long recursive trail" 0 0 24 29 1 #"\n" 0 0 17 3 67 #"; 2. Use local to package your iterative recursive functions nicely" 0 0 24 29 1 #"\n" 0 0 17 3 55 #";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;" 0 0 24 29 1 #"\n" 0 0 24 29 1 #"\n" 0 7 391 17 0 0 0 64 0 17 3 70 ( #"; Remember that the (recursive-sum) function above will look like th" #"is" ) 0 0 24 29 1 #"\n" 0 0 17 3 24 #"; before simplification:" 0 0 24 29 1 #"\n" 0 0 24 29 1 #"\n" 0 0 24 3 1 #"(" 0 0 14 3 1 #"+" 0 0 24 3 1 #" " 0 0 21 3 1 #"1" 0 0 24 3 2 #" (" 0 0 14 3 1 #"+" 0 0 24 3 1 #" " 0 0 21 3 1 #"2" 0 0 24 3 2 #" (" 0 0 14 3 1 #"+" 0 0 24 3 1 #" " 0 0 21 3 1 #"3" 0 0 24 3 2 #" (" 0 0 14 3 1 #"+" 0 0 24 3 1 #" " 0 0 21 3 1 #"4" 0 0 24 3 1 #" " 0 0 14 3 5 #"empty" 0 0 24 3 4 #"))))" 0 0 24 29 1 #"\n" 0 0 17 3 15 #";^^^^^^^^^^^^^^" 0 0 24 29 1 #"\n" 0 0 17 3 53 #"; we want to avoid this long chain of partial results" 0 0 24 29 1 #"\n" 0 0 24 29 1 #"\n" 0 0 17 3 71 ( #"; IDEA: Instead of having to remember the all previous recursive cal" #"ls," ) 0 0 24 29 1 #"\n" 0 0 17 3 6 #"; keep" 0 0 17 3 1 #" " 0 0 17 3 2 #"an" 0 0 17 3 52 #" ACCUMULATOR to flatten all of those partial results" 0 0 24 29 1 #"\n" 0 0 24 29 1 #"\n" 0 0 17 3 39 #"; the accumulator is the same idea from" 0 0 17 3 7 #" foldl:" 0 0 24 29 1 #"\n" 0 0 24 3 1 #"(" 0 0 14 3 5 #"foldl" 0 0 24 3 1 #" " 0 0 14 3 1 #"+" 0 0 24 3 1 #" " 0 0 21 3 1 #"0" 0 0 24 3 2 #" (" 0 0 14 3 4 #"list" 0 0 24 3 1 #" " 0 0 21 3 1 #"1" 0 0 24 3 1 #" " 0 0 21 3 1 #"2" 0 0 24 3 1 #" " 0 0 21 3 1 #"3" 0 0 24 3 1 #" " 0 0 21 3 1 #"4" 0 0 24 3 2 #"))" 0 0 24 29 1 #"\n" 0 0 24 3 7 #" " 0 0 17 3 3 #"; ^" 0 0 24 29 1 #"\n" 0 0 24 3 7 #" " 0 0 17 3 21 #"; initial accumulator" 0 0 0 0 24 29 1 #"\n" 0 0 24 29 1 #"\n" 0 0 17 3 55 #"; iterative-sum-list : listof-numbers, number -> number" 0 0 24 29 1 #"\n" 0 0 17 3 57 #"; sums the list using iterative recursion (accumulators!)" 0 0 24 29 1 #"\n" 0 0 24 3 1 #"(" 0 0 15 3 6 #"define" 0 0 24 3 2 #" (" 0 0 14 3 18 #"iterative-sum-list" 0 0 24 3 1 #" " 0 0 14 3 1 #"l" 0 0 14 3 2 #"on" 0 0 24 3 1 #" " 0 0 14 3 11 #"partial-sum" 0 0 24 3 1 #")" 0 0 24 29 1 #"\n" 0 0 24 3 3 #" (" 0 0 14 3 2 #"if" 0 0 24 3 2 #" (" 0 0 14 3 6 #"empty?" 0 0 24 3 1 #" " 0 0 14 3 3 #"lon" 0 0 24 3 2 #") " 0 0 17 3 16 #"; same base case" 0 0 24 29 1 #"\n" 0 0 24 3 6 #" " 0 0 14 3 11 #"partial-sum" 0 0 24 3 2 #" " 0 0 17 3 45 #"; was 0 before, now we return the partial-sum" 0 0 24 29 1 #"\n" 0 0 24 29 1 #"\n" 0 0 24 3 6 #" " 0 0 17 3 60 #"; notice how the recursive call wraps the entire \"else\" case" 0 0 24 29 1 #"\n" 0 0 24 3 6 #" " 0 0 17 3 44 #"; there's no (+ 1 ...) trail to leave behind" 0 0 24 29 1 #"\n" 0 0 24 3 7 #" (" 0 0 14 3 18 #"iterative-sum-list" 0 0 24 3 2 #" (" 0 0 14 3 4 #"rest" 0 0 24 3 1 #" " 0 0 14 3 3 #"lon" 0 0 24 3 1 #")" 0 0 24 29 1 #"\n" 0 0 24 3 27 #" (" 0 0 14 3 1 #"+" 0 0 24 3 2 #" (" 0 0 14 3 5 #"first" 0 0 24 3 1 #" " 0 0 14 3 3 #"lon" 0 0 24 3 2 #") " 0 0 14 3 11 #"partial-sum" 0 0 24 3 4 #"))))" 0 0 24 29 1 #"\n" 0 0 24 29 1 #"\n" 0 0 24 3 1 #"(" 0 0 14 3 18 #"iterative-sum-list" 0 0 24 3 2 #" (" 0 0 14 3 4 #"list" 0 0 24 3 1 #" " 0 0 21 3 1 #"1" 0 0 24 3 1 #" " 0 0 21 3 1 #"2" 0 0 24 3 1 #" " 0 0 21 3 1 #"3" 0 0 24 3 1 #" " 0 0 21 3 1 #"4" 0 0 24 3 1 #" " 0 0 21 3 1 #"5" 0 0 24 3 1 #" " 0 0 21 3 1 #"6" 0 0 24 3 1 #" " 0 0 21 3 1 #"7" 0 0 24 3 1 #" " 0 0 21 3 1 #"8" 0 0 24 3 1 #")" 0 0 24 29 1 #"\n" 0 0 24 3 17 #" " 0 0 21 3 1 #"0" 0 0 24 3 1 #")" 0 0 24 29 1 #"\n" 0 0 24 3 15 #" " 0 0 17 3 3 #"; ^" 0 0 24 29 1 #"\n" 0 0 24 3 15 #" " 0 0 17 3 49 #"; remember, we need to specify the start value of" 0 0 24 29 1 #"\n" 0 0 24 3 15 #" " 0 0 17 3 39 #"; the accumulator, just like with foldl" 0 0 24 29 1 #"\n" 0 0 24 29 1 #"\n" 0 0 17 3 34 #"; but that's kind of annoying....." 0 0 24 29 1 #"\n" 0 0 24 29 1 #"\n" 0 0 17 3 51 #"; IDEA: Use local to write a wrapper around our new" 0 0 24 29 1 #"\n" 0 0 17 3 53 #"; iterative recursive function, in order to eliminate" 0 0 24 29 1 #"\n" 0 0 17 3 50 #"; the need for the user to specify the start value" 0 0 24 29 1 #"\n" 0 0 24 29 1 #"\n" 0 0 17 3 44 #"; better-sum-list : listof-numbers -> number" 0 0 24 29 1 #"\n" 0 0 17 3 65 #"; sums the list using iterative recursion, and NO extra '0' input" 0 0 24 29 1 #"\n" 0 0 24 3 1 #"(" 0 0 15 3 6 #"define" 0 0 24 3 2 #" (" 0 0 14 3 15 #"better-sum-list" 0 0 24 3 1 #" " 0 0 14 3 3 #"lon" 0 0 24 3 1 #")" 0 0 24 29 1 #"\n" 0 0 24 3 3 #" (" 0 0 15 3 5 #"local" 0 0 24 3 2 #" [" 0 0 17 3 47 #"; I just copy-pasted iterative-sum-list here..." 0 0 24 29 1 #"\n" 0 0 24 3 11 #" (" 0 0 15 3 6 #"define" 0 0 24 3 2 #" (" 0 0 14 3 18 #"iterative-sum-list" 0 0 24 3 1 #" " 0 0 14 3 3 #"lon" 0 0 24 3 1 #" " 0 0 14 3 11 #"partial-sum" 0 0 24 3 1 #")" 0 0 24 29 1 #"\n" 0 0 24 3 13 #" (" 0 0 14 3 2 #"if" 0 0 24 3 2 #" (" 0 0 14 3 6 #"empty?" 0 0 24 3 1 #" " 0 0 14 3 3 #"lon" 0 0 24 3 2 #") " 0 0 17 3 16 #"; same base case" 0 0 24 29 1 #"\n" 0 0 24 3 16 #" " 0 0 14 3 11 #"partial-sum" 0 0 24 3 2 #" " 0 0 17 3 45 #"; was 0 before, now we return the partial-sum" 0 0 24 29 1 #"\n" 0 0 24 3 17 #" (" 0 0 14 3 18 #"iterative-sum-list" 0 0 24 3 2 #" (" 0 0 14 3 4 #"rest" 0 0 24 3 1 #" " 0 0 14 3 3 #"lon" 0 0 24 3 1 #")" 0 0 24 29 1 #"\n" 0 0 24 3 37 #" (" 0 0 14 3 1 #"+" 0 0 24 3 2 #" (" 0 0 14 3 5 #"first" 0 0 24 3 1 #" " 0 0 14 3 3 #"lon" 0 0 24 3 2 #") " 0 0 14 3 11 #"partial-sum" 0 0 24 3 5 #"))))]" 0 0 24 29 1 #"\n" 0 0 24 3 4 #" " 0 0 17 3 69 ( #"; In the body of the local, make the \"starting call\" with the 0 va" #"lue" ) 0 0 24 29 1 #"\n" 0 0 24 3 5 #" (" 0 0 14 3 15 #"sum-list-helper" 0 0 24 3 1 #" " 0 0 14 3 3 #"lon" 0 0 24 3 1 #" " 0 0 21 3 1 #"0" 0 0 24 3 3 #")))" 0 0 24 29 1 #"\n" 0 0 24 29 1 #"\n" 0 0 17 3 73 ( #"; GENERAL PROCESS: writing a wrapper over an iterative recursive fun" #"ction" ) 0 0 24 29 1 #"\n" 0 0 24 29 1 #"\n" 0 0 17 3 66 #"; Step 1 - write the wrapper's signature and stub out the function" 0 0 24 29 1 #"\n" 0 0 17 3 55 #"; typically you want to eliminate the accumulator input" 0 0 24 29 1 #"\n" 0 0 24 29 1 #"\n" 0 7 85 4 0 0 0 13 0 17 3 44 #"; better-sum-list : listof-numbers -> number" 0 0 24 29 1 #"\n" 0 0 24 3 1 #"(" 0 0 15 3 6 #"define" 0 0 24 3 2 #" (" 0 0 14 3 15 #"better-sum-list" 0 0 24 3 1 #" " 0 0 14 3 10 #"better-lon" 0 0 24 3 1 #")" 0 0 24 29 1 #"\n" 0 0 24 3 2 #" " 0 0 14 3 3 #"..." 0 0 24 3 1 #")" 0 0 0 0 24 29 1 #"\n" 0 0 24 29 1 #"\n" 0 0 17 3 22 #"; Step 2 - add a local" 0 0 24 29 1 #"\n" 0 0 24 29 1 #"\n" 0 7 265 4 0 0 0 43 0 17 3 44 #"; better-sum-list : listof-numbers -> number" 0 0 24 29 1 #"\n" 0 0 24 3 1 #"(" 0 0 15 3 6 #"define" 0 0 24 3 2 #" (" 0 0 14 3 15 #"better-sum-list" 0 0 24 3 1 #" " 0 0 14 3 10 #"better-lon" 0 0 24 3 1 #")" 0 0 24 29 1 #"\n" 0 0 24 3 3 #" (" 0 0 15 3 5 #"local" 0 0 24 3 2 #" [" 0 0 14 3 7 #"...your" 0 0 24 3 1 #" " 0 0 14 3 3 #"old" 0 0 24 3 1 #" " 0 0 14 3 8 #"function" 0 0 24 3 1 #" " 0 0 14 3 4 #"will" 0 0 24 3 1 #" " 0 0 14 3 2 #"go" 0 0 24 3 1 #" " 0 0 14 3 7 #"here..." 0 0 24 3 1 #"]" 0 0 24 29 1 #"\n" 0 0 24 3 4 #" " 0 0 24 29 1 #"\n" 0 0 24 3 4 #" " 0 0 14 3 6 #"...you" 0 0 21 3 1 #"'" 0 0 14 3 2 #"ll" 0 0 24 3 1 #" " 0 0 14 3 4 #"call" 0 0 24 3 1 #" " 0 0 14 3 4 #"your" 0 0 24 3 1 #" " 0 0 14 3 3 #"old" 0 0 24 3 1 #" " 0 0 14 3 8 #"function" 0 0 24 3 1 #" " 0 0 14 3 7 #"here..." 0 0 24 3 1 #")" 0 0 0 0 24 29 1 #"\n" 0 0 24 29 1 #"\n" 0 0 17 3 62 #"; Step 2.5 - copy your old function inside the square brackets" 0 0 24 29 1 #"\n" 0 0 24 29 1 #"\n" 0 7 433 4 0 0 0 71 0 17 3 44 #"; better-sum-list : listof-numbers -> number" 0 0 24 29 1 #"\n" 0 0 24 3 1 #"(" 0 0 15 3 6 #"define" 0 0 24 3 2 #" (" 0 0 14 3 15 #"better-sum-list" 0 0 24 3 1 #" " 0 0 14 3 10 #"better-lon" 0 0 24 3 1 #")" 0 0 24 29 1 #"\n" 0 0 24 3 3 #" (" 0 0 15 3 5 #"local" 0 0 24 3 3 #" [(" 0 0 15 3 6 #"define" 0 0 24 3 2 #" (" 0 0 14 3 18 #"iterative-sum-list" 0 0 24 3 1 #" " 0 0 14 3 3 #"lon" 0 0 24 3 1 #" " 0 0 14 3 11 #"partial-sum" 0 0 24 3 1 #")" 0 0 24 29 1 #"\n" 0 0 24 3 13 #" (" 0 0 14 3 2 #"if" 0 0 24 3 2 #" (" 0 0 14 3 6 #"empty?" 0 0 24 3 1 #" " 0 0 14 3 3 #"lon" 0 0 24 3 2 #") " 0 0 17 3 16 #"; same base case" 0 0 24 29 1 #"\n" 0 0 24 3 16 #" " 0 0 14 3 11 #"partial-sum" 0 0 24 3 2 #" " 0 0 17 3 45 #"; was 0 before, now we return the partial-sum" 0 0 24 29 1 #"\n" 0 0 24 3 17 #" (" 0 0 14 3 18 #"iterative-sum-list" 0 0 24 3 2 #" (" 0 0 14 3 4 #"rest" 0 0 24 3 1 #" " 0 0 14 3 3 #"lon" 0 0 24 3 1 #")" 0 0 24 29 1 #"\n" 0 0 24 3 37 #" (" 0 0 14 3 1 #"+" 0 0 24 3 2 #" (" 0 0 14 3 5 #"first" 0 0 24 3 1 #" " 0 0 14 3 3 #"lon" 0 0 24 3 2 #") " 0 0 14 3 11 #"partial-sum" 0 0 24 3 5 #"))))]" 0 0 24 29 1 #"\n" 0 0 24 3 4 #" " 0 0 24 29 1 #"\n" 0 0 24 3 4 #" " 0 0 14 3 6 #"...you" 0 0 21 3 1 #"'" 0 0 14 3 2 #"ll" 0 0 24 3 1 #" " 0 0 14 3 4 #"call" 0 0 24 3 1 #" " 0 0 14 3 4 #"your" 0 0 24 3 1 #" " 0 0 14 3 3 #"old" 0 0 24 3 1 #" " 0 0 14 3 8 #"function" 0 0 24 3 1 #" " 0 0 14 3 7 #"here..." 0 0 24 3 1 #")" 0 0 0 0 24 29 1 #"\n" 0 0 24 29 1 #"\n" 0 0 17 3 77 ( #"; 3 - In the body of your local, add the \"kickoff\" call to your ol" #"d function," ) 0 0 24 29 1 #"\n" 0 0 17 3 53 #"; which you've defined locally in the square brackets" 0 0 24 29 1 #"\n" 0 0 24 29 1 #"\n" 0 7 493 4 0 0 0 81 0 17 3 44 #"; better-sum-list : listof-numbers -> number" 0 0 24 29 1 #"\n" 0 0 24 3 1 #"(" 0 0 15 3 6 #"define" 0 0 24 3 2 #" (" 0 0 14 3 15 #"better-sum-list" 0 0 24 3 1 #" " 0 0 14 3 10 #"better-lon" 0 0 24 3 1 #")" 0 0 24 29 1 #"\n" 0 0 24 3 3 #" (" 0 0 15 3 5 #"local" 0 0 24 3 3 #" [(" 0 0 15 3 6 #"define" 0 0 24 3 2 #" (" 0 0 14 3 18 #"iterative-sum-list" 0 0 24 3 1 #" " 0 0 14 3 3 #"lon" 0 0 24 3 1 #" " 0 0 14 3 11 #"partial-sum" 0 0 24 3 1 #")" 0 0 24 29 1 #"\n" 0 0 24 3 13 #" (" 0 0 14 3 2 #"if" 0 0 24 3 2 #" (" 0 0 14 3 6 #"empty?" 0 0 24 3 1 #" " 0 0 14 3 3 #"lon" 0 0 24 3 2 #") " 0 0 17 3 16 #"; same base case" 0 0 24 29 1 #"\n" 0 0 24 3 16 #" " 0 0 14 3 11 #"partial-sum" 0 0 24 3 2 #" " 0 0 17 3 45 #"; was 0 before, now we return the partial-sum" 0 0 24 29 1 #"\n" 0 0 24 3 17 #" (" 0 0 14 3 18 #"iterative-sum-list" 0 0 24 3 2 #" (" 0 0 14 3 4 #"rest" 0 0 24 3 1 #" " 0 0 14 3 3 #"lon" 0 0 24 3 1 #")" 0 0 24 29 1 #"\n" 0 0 24 3 37 #" (" 0 0 14 3 1 #"+" 0 0 24 3 2 #" (" 0 0 14 3 5 #"first" 0 0 24 3 1 #" " 0 0 14 3 3 #"lon" 0 0 24 3 2 #") " 0 0 14 3 11 #"partial-sum" 0 0 24 3 5 #"))))]" 0 0 24 29 1 #"\n" 0 0 24 29 1 #"\n" 0 0 24 3 4 #" " 0 0 17 3 34 #"; notice we pass in two arguments:" 0 0 24 29 1 #"\n" 0 0 24 3 4 #" " 0 0 17 3 7 #"; - the" 0 0 17 3 1 #" " 0 0 17 3 4 #"list" 0 0 17 3 1 #" " 0 0 17 3 5 #"input" 0 0 17 3 1 #" " 0 0 17 3 8 #"provided" 0 0 17 3 1 #" " 0 0 17 3 2 #"to" 0 0 17 3 1 #" " 0 0 17 3 20 #"the wrapper function" 0 0 24 29 1 #"\n" 0 0 24 3 4 #" " 0 0 17 3 55 #"; - the starting accumulator, which we know is always 0" 0 0 24 29 1 #"\n" 0 0 24 3 5 #" (" 0 0 14 3 18 #"iterative-sum-list" 0 0 24 3 1 #" " 0 0 14 3 10 #"better-lon" 0 0 24 3 1 #" " 0 0 21 3 1 #"0" 0 0 24 3 3 #")))" 0 0 0 0 24 29 1 #"\n" 0 0 24 29 1 #"\n" 0 0 17 3 44 #";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;" 0 0 24 29 1 #"\n" 0 0 17 3 54 #"; Using regular (non-iterative) recursion to implement" 0 0 24 29 1 #"\n" 0 0 17 3 16 #"; map and filter" 0 0 24 29 1 #"\n" 0 0 17 3 1 #";" 0 0 24 29 1 #"\n" 0 0 17 3 8 #"; IDEAS:" 0 0 24 29 1 #"\n" 0 0 17 3 24 #"; 1. pick a sample input" 0 0 24 29 1 #"\n" 0 0 17 3 42 #"; 2. figure out what the output looks like" 0 0 24 29 1 #"\n" 0 0 17 3 65 #"; 3. figure out what the output looks like before it's simplified" 0 0 24 29 1 #"\n" 0 0 17 3 40 #"; 4. try to notice the recursive pattern" 0 0 24 29 1 #"\n" 0 0 17 3 61 #"; 5. Now write a function to build up that thing, recursively" 0 0 24 29 1 #"\n" 0 0 17 3 45 #";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;" 0 0 24 29 1 #"\n" 0 0 24 29 1 #"\n" 0 0 17 3 33 #";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;" 0 0 24 29 1 #"\n" 0 0 17 3 19 #"; HOW A MAP IS BORN" 0 0 24 29 1 #"\n" 0 0 17 3 33 #";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;" 0 0 24 29 1 #"\n" 0 0 24 29 1 #"\n" 0 0 17 3 36 #"; map : proc lst -> lst" 0 0 24 29 1 #"\n" 0 0 17 3 43 #"; (A -> B) (listof A) (listof B)" 0 0 24 29 1 #"\n" 0 0 24 29 1 #"\n" 0 0 17 3 33 #"; thanks-obama : string -> string" 0 0 24 29 1 #"\n" 0 0 17 3 11 #"; demo proc" 0 0 24 29 1 #"\n" 0 0 24 3 1 #"(" 0 0 15 3 6 #"define" 0 0 24 3 2 #" (" 0 0 14 3 12 #"thanks-obama" 0 0 24 3 1 #" " 0 0 14 3 1 #"s" 0 0 24 3 1 #")" 0 0 24 29 1 #"\n" 0 0 24 3 3 #" (" 0 0 14 3 13 #"string-append" 0 0 24 3 1 #" " 0 0 19 3 19 #"\"Thanks Obama for \"" 0 0 24 3 1 #" " 0 0 14 3 1 #"s" 0 0 24 3 2 #"))" 0 0 24 29 1 #"\n" 0 0 24 29 1 #"\n" 0 0 17 3 10 #"; demo lst" 0 0 24 29 1 #"\n" 0 0 24 3 1 #"(" 0 0 15 3 6 #"define" 0 0 24 3 1 #" " 0 0 14 3 20 #"list-of-great-things" 0 0 24 29 1 #"\n" 0 0 24 3 3 #" (" 0 0 14 3 4 #"list" 0 0 24 3 1 #" " 0 0 19 3 13 #"\"hoverboards\"" 0 0 24 3 1 #" " 0 0 19 3 14 #"\"Fall Out Boy\"" 0 0 24 3 2 #"))" 0 0 24 29 1 #"\n" 0 0 24 29 1 #"\n" 0 7 289 4 0 0 0 47 0 17 3 7 #"; IDEA:" 0 0 17 3 1 #" " 0 0 17 3 5 #"Using" 0 0 17 3 1 #" " 0 0 17 3 3 #"the" 0 0 17 3 1 #" " 0 0 17 3 5 #"above" 0 0 17 3 1 #" " 0 0 17 3 4 #"proc" 0 0 17 3 1 #" " 0 0 17 3 3 #"and" 0 0 17 3 1 #" " 0 0 17 3 4 #"lst," 0 0 24 29 1 #"\n" 0 0 17 3 7 #"; write" 0 0 17 3 1 #" " 0 0 17 3 1 #"a" 0 0 17 3 1 #" " 0 0 17 3 8 #"function" 0 0 17 3 1 #" " 0 0 17 3 4 #"that" 0 0 17 3 1 #" " 0 0 17 3 29 #"produces something like this:" 0 0 24 29 1 #"\n" 0 0 24 29 1 #"\n" 0 0 24 3 1 #"(" 0 0 14 3 4 #"cons" 0 0 24 3 2 #" (" 0 0 14 3 12 #"thanks-obama" 0 0 24 3 1 #" " 0 0 19 3 13 #"\"hoverboards\"" 0 0 24 3 1 #")" 0 0 24 29 1 #"\n" 0 0 24 3 7 #" (" 0 0 14 3 4 #"cons" 0 0 24 3 2 #" (" 0 0 14 3 12 #"thanks-obama" 0 0 24 3 1 #" " 0 0 19 3 14 #"\"Fall Out Boy\"" 0 0 24 3 1 #")" 0 0 24 29 1 #"\n" 0 0 24 3 12 #" " 0 0 14 3 5 #"empty" 0 0 24 3 2 #"))" 0 0 24 29 1 #"\n" 0 0 24 29 1 #"\n" 0 0 17 3 50 #"; since that's what the resulting list looks like." 0 0 0 0 24 29 1 #"\n" 0 0 24 29 1 #"\n" 0 0 17 3 45 #"; my-map : (A -> B), (listof A) -> (listof B)" 0 0 24 29 1 #"\n" 0 0 17 3 43 #"; NOT with iterative recursion/accumulators" 0 0 24 29 1 #"\n" 0 0 24 3 1 #"(" 0 0 15 3 6 #"define" 0 0 24 3 2 #" (" 0 0 14 3 6 #"my-map" 0 0 24 3 1 #" " 0 0 14 3 4 #"proc" 0 0 24 3 1 #" " 0 0 14 3 3 #"lst" 0 0 24 3 1 #")" 0 0 24 29 1 #"\n" 0 0 24 3 3 #" (" 0 0 14 3 2 #"if" 0 0 24 3 2 #" (" 0 0 14 3 6 #"empty?" 0 0 24 3 1 #" " 0 0 14 3 3 #"lst" 0 0 24 3 1 #")" 0 0 24 29 1 #"\n" 0 0 24 3 6 #" " 0 0 14 3 5 #"empty" 0 0 24 29 1 #"\n" 0 0 24 3 6 #" " 0 0 17 3 16 #"; Recursive step" 0 0 24 29 1 #"\n" 0 0 24 3 7 #" (" 0 0 14 3 4 #"cons" 0 0 24 3 2 #" (" 0 0 14 3 4 #"proc" 0 0 24 3 2 #" (" 0 0 14 3 5 #"first" 0 0 24 3 1 #" " 0 0 14 3 3 #"lst" 0 0 24 3 2 #"))" 0 0 24 29 1 #"\n" 0 0 24 3 13 #" (" 0 0 14 3 6 #"my-map" 0 0 24 3 1 #" " 0 0 14 3 4 #"proc" 0 0 24 3 2 #" (" 0 0 14 3 4 #"rest" 0 0 24 3 1 #" " 0 0 14 3 3 #"lst" 0 0 24 3 5 #")))))" 0 0 24 29 1 #"\n" 0 0 24 29 1 #"\n" 0 7 391 4 0 0 0 64 0 24 3 1 #"(" 0 0 14 3 6 #"my-map" 0 0 24 3 1 #" " 0 0 14 3 12 #"thanks-obama" 0 0 24 3 1 #" " 0 0 14 3 20 #"list-of-great-things" 0 0 24 3 1 #")" 0 0 24 29 1 #"\n" 0 0 24 29 1 #"\n" 0 0 17 3 29 #"; expand list-of-great-things" 0 0 24 29 1 #"\n" 0 0 24 3 1 #"(" 0 0 14 3 6 #"my-map" 0 0 24 3 1 #" " 0 0 14 3 12 #"thanks-obama" 0 0 24 29 1 #"\n" 0 0 24 3 9 #" (" 0 0 14 3 4 #"list" 0 0 24 3 1 #" " 0 0 19 3 13 #"\"hoverboards\"" 0 0 24 3 1 #" " 0 0 19 3 14 #"\"Fall Out Boy\"" 0 0 24 3 2 #"))" 0 0 24 29 1 #"\n" 0 0 24 29 1 #"\n" 0 0 17 3 15 #"; expand my-map" 0 0 24 29 1 #"\n" 0 0 24 3 1 #"(" 0 0 14 3 4 #"cons" 0 0 24 3 2 #" (" 0 0 14 3 12 #"thanks-obama" 0 0 24 3 1 #" " 0 0 19 3 13 #"\"hoverboards\"" 0 0 24 3 1 #")" 0 0 24 29 1 #"\n" 0 0 24 3 7 #" (" 0 0 14 3 6 #"my-map" 0 0 24 3 1 #" " 0 0 14 3 12 #"thanks-obama" 0 0 24 3 2 #" (" 0 0 14 3 4 #"list" 0 0 24 3 1 #" " 0 0 19 3 1 #"\"" 0 0 19 3 4 #"Fall" 0 0 19 3 1 #" " 0 0 19 3 8 #"Out Boy\"" 0 0 24 3 3 #")))" 0 0 24 29 1 #"\n" 0 0 24 29 1 #"\n" 0 0 17 3 23 #"; expand recursive call" 0 0 24 29 1 #"\n" 0 0 24 3 1 #"(" 0 0 14 3 4 #"cons" 0 0 24 3 1 #" " 0 0 19 3 30 #"\"Thanks Obama for hoverboards\"" 0 0 24 29 1 #"\n" 0 0 24 3 7 #" (" 0 0 14 3 4 #"cons" 0 0 24 3 1 #" " 0 0 19 3 31 #"\"Thanks Obama for Fall Out Boy\"" 0 0 24 29 1 #"\n" 0 0 24 3 12 #" " 0 0 14 3 5 #"empty" 0 0 24 3 2 #"))" 0 0 0 0 24 29 1 #"\n" 0 0 24 29 1 #"\n" 0 0 17 3 33 #";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;" 0 0 24 29 1 #"\n" 0 0 17 3 22 #"; HOW A FILTER IS BORN" 0 0 24 29 1 #"\n" 0 0 17 3 33 #";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;" 0 0 24 29 1 #"\n" 0 0 24 29 1 #"\n" 0 0 17 3 39 #"; filter : pred lst -> lst" 0 0 24 29 1 #"\n" 0 0 17 3 46 #"; (A -> bool) (listof A) (listof A)" 0 0 24 29 1 #"\n" 0 0 24 29 1 #"\n" 0 0 17 3 54 #"; my-filter : (A -> boolean), (listof A) -> (listof A)" 0 0 24 29 1 #"\n" 0 0 17 3 43 #"; NOT with iterative recursion/accumulators" 0 0 24 29 1 #"\n" 0 0 24 3 1 #"(" 0 0 15 3 6 #"define" 0 0 24 3 2 #" (" 0 0 14 3 9 #"my-filter" 0 0 24 3 1 #" " 0 0 14 3 4 #"pred" 0 0 24 3 1 #" " 0 0 14 3 3 #"lst" 0 0 24 3 1 #")" 0 0 24 29 1 #"\n" 0 0 24 3 3 #" (" 0 0 14 3 2 #"if" 0 0 24 3 2 #" (" 0 0 14 3 6 #"empty?" 0 0 24 3 1 #" " 0 0 14 3 3 #"lst" 0 0 24 3 1 #")" 0 0 24 29 1 #"\n" 0 0 24 3 6 #" " 0 0 14 3 5 #"empty" 0 0 24 29 1 #"\n" 0 0 24 3 6 #" " 0 0 24 29 1 #"\n" 0 0 24 3 7 #" (" 0 0 14 3 2 #"if" 0 0 24 29 1 #"\n" 0 0 24 3 7 #" " 0 0 17 3 33 #"; test the first item in the list" 0 0 24 29 1 #"\n" 0 0 24 3 8 #" (" 0 0 14 3 4 #"pred" 0 0 24 3 2 #" (" 0 0 14 3 5 #"first" 0 0 24 3 1 #" " 0 0 14 3 3 #"lst" 0 0 24 3 2 #"))" 0 0 24 29 1 #"\n" 0 0 24 3 7 #" " 0 0 17 3 36 #"; if it passes, then cons first item" 0 0 24 29 1 #"\n" 0 0 24 3 8 #" (" 0 0 14 3 4 #"cons" 0 0 24 3 2 #" (" 0 0 14 3 5 #"first" 0 0 24 3 1 #" " 0 0 14 3 3 #"lst" 0 0 24 3 1 #")" 0 0 24 29 1 #"\n" 0 0 24 3 14 #" (" 0 0 14 3 9 #"my-filter" 0 0 24 3 1 #" " 0 0 14 3 4 #"pred" 0 0 24 3 2 #" (" 0 0 14 3 4 #"rest" 0 0 24 3 1 #" " 0 0 14 3 3 #"lst" 0 0 24 3 3 #")))" 0 0 24 29 1 #"\n" 0 0 24 3 7 #" " 0 0 17 3 27 #"; else just skip first item" 0 0 24 29 1 #"\n" 0 0 24 3 8 #" (" 0 0 14 3 9 #"my-filter" 0 0 24 3 1 #" " 0 0 14 3 4 #"pred" 0 0 24 3 2 #" (" 0 0 14 3 4 #"rest" 0 0 24 3 1 #" " 0 0 14 3 3 #"lst" 0 0 24 3 5 #")))))" 0 0 24 29 1 #"\n" 0 0 24 29 1 #"\n" 0 0 17 3 64 #"; EXAMPLE: Calling my-filter with an inline lambda, which checks" 0 0 24 29 1 #"\n" 0 0 17 3 4 #"; if" 0 0 17 3 1 #" " 0 0 17 3 1 #"a" 0 0 17 3 1 #" " 0 0 17 3 6 #"number" 0 0 17 3 1 #" " 0 0 17 3 2 #"is" 0 0 17 3 1 #" " 0 0 17 3 4 #"over" 0 0 17 3 5 #" 9000" 0 0 24 29 1 #"\n" 0 0 24 29 1 #"\n" 0 0 24 3 1 #"(" 0 0 14 3 9 #"my-filter" 0 0 24 29 1 #"\n" 0 0 24 3 1 #" " 0 0 17 3 18 #"; number -> number" 0 0 24 29 1 #"\n" 0 0 24 3 1 #" " 0 0 17 3 33 #"; checks if a number is over 9000" 0 0 24 29 1 #"\n" 0 0 24 3 2 #" (" 0 0 15 3 6 #"lambda" 0 0 24 3 2 #" (" 0 0 14 3 1 #"n" 0 0 24 3 3 #") (" 0 0 14 3 1 #">" 0 0 24 3 1 #" " 0 0 14 3 1 #"n" 0 0 24 3 1 #" " 0 0 21 3 4 #"9000" 0 0 24 3 2 #"))" 0 0 24 29 1 #"\n" 0 0 24 3 2 #" (" 0 0 14 3 4 #"list" 0 0 24 3 1 #" " 0 0 21 3 1 #"0" 0 0 24 3 1 #" " 0 0 21 3 1 #"1" 0 0 24 3 1 #" " 0 0 21 3 1 #"2" 0 0 24 3 1 #" " 0 0 21 3 4 #"9001" 0 0 24 3 2 #"))" 0 0 24 29 1 #"\n" 0 0 24 29 1 #"\n" 0 0 17 3 30 #"; this will return (list 9001)" 0 0