#reader(lib"read.ss""wxme")WXME0108 ## #| This file uses the GRacket editor format. Open this file in DrRacket version 6.2 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 68 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 6 #"Menlo\0" 0 25 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 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 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 92 -1 93 -1 -1 0 1 0 0 0 0 0 0 0 1 1 1 150 0 150 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 92 93 -1 -1 -1 0 1 0 0 0 0 0 0 0 1 1 1 255 0 0 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 92 -1 93 -1 -1 0 1 0 0 0 0 0 0 0 1 1 1 0 0 175 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 92 -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 -1 92 -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 38 #"framework:syntax-color:scheme:keyword\0" 0 -1 1 #"\0" 1 0 -1 92 -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 1 #"\0" 0 -1 1 #"\0" 1 0 -1 92 -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 92 -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 1 #"\0" 0 -1 1 #"\0" 1 0 -1 92 -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 92 -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 35 #"framework:syntax-color:scheme:text\0" 0 -1 1 #"\0" 1 0 -1 92 -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 39 #"framework:syntax-color:scheme:constant\0" 0 -1 1 #"\0" 1 0 -1 92 -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 1 #"\0" 0 -1 1 #"\0" 1 0 -1 92 -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 92 -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 42 #"framework:syntax-color:scheme:parenthesis\0" 0 -1 1 #"\0" 1 0 -1 92 -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 1 #"\0" 0 -1 1 #"\0" 1 0 -1 92 -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 -1 92 -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 1 #"\0" 0 -1 1 #"\0" 1 0 -1 92 -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 92 -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 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 0 0 0 0 0 0 -1 -1 2 1 #"\0" 0 -1 1 #"\0" 1 0 -1 92 -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 92 -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 1 #"\0" 0 -1 1 #"\0" 1 0 -1 92 -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 92 -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 37 #"drracket:check-syntax:unused-require\0" 0 -1 1 #"\0" 1 0 -1 92 -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 #"drracket:check-syntax:free-variable\0" 0 -1 1 #"\0" 1 0 -1 92 -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 1 #"\0" 0 -1 1 #"\0" 1 0 -1 92 -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 -1 92 -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 47 #"drracket:check-syntax:my-obligation-style-pref\0" 0 -1 1 #"\0" 1 0 -1 92 -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 1 #"\0" 0 -1 1 #"\0" 1 0 -1 92 -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 92 -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 48 #"drracket:check-syntax:unk-obligation-style-pref\0" 0 -1 1 #"\0" 1 0 -1 92 -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 1 #"\0" 0 -1 1 #"\0" 1 0 -1 92 -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 92 -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 26 #"plt:htdp:test-coverage-on\0" 0 -1 1 #"\0" 1 0 -1 92 -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 1 #"\0" 0 -1 1 #"\0" 1 0 -1 92 -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 92 -1 93 -1 -1 0 1 0 0 0 1 0 0 0 0 0 0 255 165 0 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 92 -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 38 #"plt:module-language:test-coverage-off\0" 0 -1 1 #"\0" 1 0 -1 92 -1 93 -1 -1 0 1 0 0 0 1 0 0 0 0 0 0 255 165 0 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 2 1 #"\0" 0 -1 1 #"\0" 1.0 0 -1 -1 -1 -1 -1 -1 1 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 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 65 105 225 0 0 0 -1 -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 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 21 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 14 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 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 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 19 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 1 #"\0" 0 -1 1 #"\0" 0 13 -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 1 #"\0" 0 -1 1 #"\0" 0 13 -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 0 2048 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 194 ( #"#reader(lib \"htdp-intermediate-reader.ss\" \"lang\")((modname |#lec" #"t27-ancestor-tree|) (read-case-sensitive #t) (teachpacks ()) (htdp-s" #"ettings #(#t constructor repeating-decimal #f #t none #f ())))" ) 0 0 4 29 1 #"\n" 0 0 17 3 38 #"; We want to represent ancestor-trees:" 0 0 24 29 1 #"\n" 0 0 24 29 1 #"\n" 0 0 17 3 45 #"; ?? ?? ?? ?? ?? ??" 0 0 24 29 1 #"\n" 0 0 17 3 44 #"; \\ / \\ / \\ /" 0 0 24 29 1 #"\n" 0 0 17 3 47 #"; jackie.. ?? abe... mona..." 0 0 24 29 1 #"\n" 0 0 17 3 42 #"; \\ / \\ /" 0 0 24 29 1 #"\n" 0 0 17 3 52 #"; marge (b.1956, blue) homer (b.1955, brown)" 0 0 24 29 1 #"\n" 0 0 17 3 31 #"; \\ /" 0 0 24 29 1 #"\n" 0 0 17 3 34 #"; bart (b.1979, brown eyes)" 0 0 24 29 1 #"\n" 0 0 24 29 1 #"\n" 0 0 17 3 13 #"; data def'n:" 0 0 24 29 1 #"\n" 0 0 17 3 33 #"; an anc-tree (ancestor tree) is:" 0 0 24 29 1 #"\n" 0 0 17 3 12 #"; - 'unknown" 0 0 24 29 1 #"\n" 0 0 17 3 62 #"; - (make-child [string] [int] [symbol] [anc-tree] [anc-tree])" 0 0 24 29 1 #"\n" 0 0 24 3 1 #"(" 0 0 15 3 13 #"define-struct" 0 0 24 3 1 #" " 0 0 14 3 5 #"child" 0 0 24 3 2 #" (" 0 0 14 3 4 #"name" 0 0 24 3 1 #" " 0 0 14 3 3 #"yob" 0 0 24 3 1 #" " 0 0 14 3 3 #"eye" 0 0 24 3 1 #" " 0 0 14 3 2 #"ma" 0 0 24 3 1 #" " 0 0 14 3 2 #"pa" 0 0 24 3 2 #"))" 0 0 24 29 1 #"\n" 0 0 24 29 1 #"\n" 0 0 24 29 1 #"\n" 0 0 17 3 29 #"; height : anc-tree -> natnum" 0 0 24 29 1 #"\n" 0 0 17 3 67 #"; Return the number of childs from the root to the furthest unknown" 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 #"height" 0 0 24 3 1 #" " 0 0 14 3 2 #"at" 0 0 24 3 1 #")" 0 0 24 29 1 #"\n" 0 0 24 3 3 #" (" 0 0 15 3 4 #"cond" 0 0 24 3 3 #" [(" 0 0 14 3 8 #"unknown?" 0 0 24 3 1 #" " 0 0 14 3 2 #"at" 0 0 24 3 2 #") " 0 0 21 3 1 #"0" 0 0 24 3 1 #"]" 0 0 24 29 1 #"\n" 0 0 24 3 10 #" [(" 0 0 14 3 6 #"child?" 0 0 24 3 1 #" " 0 0 14 3 2 #"at" 0 0 24 3 5 #") (" 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 3 #"max" 0 0 24 3 2 #" (" 0 0 14 3 6 #"height" 0 0 24 3 2 #" (" 0 0 14 3 8 #"child-ma" 0 0 24 3 1 #" " 0 0 14 3 2 #"at" 0 0 24 3 2 #"))" 0 0 24 29 1 #"\n" 0 0 24 3 34 #" (" 0 0 14 3 6 #"height" 0 0 24 3 2 #" (" 0 0 14 3 8 #"child-pa" 0 0 24 3 1 #" " 0 0 14 3 2 #"at" 0 0 24 3 8 #")))) ]))" 0 0 24 29 1 #"\n" 0 0 17 3 60 #";; to save writing: write `c-ma` instead of `child-ma`, etc." 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 3 2 #" (" 0 0 14 3 6 #"height" 0 0 24 3 1 #" " 0 0 21 3 1 #"'" 0 0 14 3 7 #"unknown" 0 0 24 3 2 #") " 0 0 21 3 1 #"0" 0 0 24 3 1 #")" 0 0 24 29 1 #"\n" 0 0 24 3 1 #"(" 0 0 14 3 12 #"check-expect" 0 0 24 3 2 #" (" 0 0 14 3 6 #"height" 0 0 24 3 1 #" " 0 0 14 3 6 #"jackie" 0 0 24 3 2 #") " 0 0 21 3 1 #"1" 0 0 24 3 1 #")" 0 0 24 29 1 #"\n" 0 0 24 3 1 #"(" 0 0 14 3 12 #"check-expect" 0 0 24 3 2 #" (" 0 0 14 3 6 #"height" 0 0 24 3 1 #" " 0 0 14 3 5 #"marge" 0 0 24 3 2 #") " 0 0 21 3 1 #"2" 0 0 24 3 1 #")" 0 0 24 29 1 #"\n" 0 0 24 3 1 #"(" 0 0 14 3 12 #"check-expect" 0 0 24 3 2 #" (" 0 0 14 3 6 #"height" 0 0 24 3 1 #" " 0 0 14 3 5 #"homer" 0 0 24 3 2 #") " 0 0 21 3 1 #"2" 0 0 24 3 1 #")" 0 0 24 29 1 #"\n" 0 0 24 3 1 #"(" 0 0 14 3 12 #"check-expect" 0 0 24 3 2 #" (" 0 0 14 3 6 #"height" 0 0 24 3 1 #" " 0 0 14 3 4 #"bart" 0 0 24 3 2 #") " 0 0 21 3 1 #"3" 0 0 24 3 1 #")" 0 0 24 29 1 #"\n" 0 0 24 29 1 #"\n" 0 0 24 29 1 #"\n" 0 0 24 29 1 #"\n" 0 0 17 3 24 #"; examples of anc-trees:" 0 0 24 29 1 #"\n" 0 0 21 3 1 #"'" 0 0 14 3 7 #"unknown" 0 0 24 29 1 #"\n" 0 0 24 3 1 #"(" 0 0 14 3 10 #"make-child" 0 0 24 3 1 #" " 0 0 19 3 8 #"\"Jackie\"" 0 0 24 3 1 #" " 0 0 21 3 4 #"1926" 0 0 24 3 1 #" " 0 0 21 3 1 #"'" 0 0 14 3 5 #"brown" 0 0 24 3 1 #" " 0 0 21 3 1 #"'" 0 0 14 3 7 #"unknown" 0 0 24 3 1 #" " 0 0 21 3 1 #"'" 0 0 14 3 7 #"unknown" 0 0 24 3 1 #")" 0 0 24 29 1 #"\n" 0 0 24 3 1 #"(" 0 0 14 3 10 #"make-child" 0 0 24 3 1 #" " 0 0 19 3 7 #"\"Marge\"" 0 0 24 29 1 #"\n" 0 0 24 3 12 #" " 0 0 21 3 4 #"1956" 0 0 24 29 1 #"\n" 0 0 24 3 12 #" " 0 0 21 3 1 #"'" 0 0 14 3 4 #"blue" 0 0 24 29 1 #"\n" 0 0 24 3 13 #" (" 0 0 14 3 10 #"make-child" 0 0 24 3 1 #" " 0 0 19 3 8 #"\"Jackie\"" 0 0 24 3 1 #" " 0 0 21 3 4 #"1926" 0 0 24 3 1 #" " 0 0 21 3 1 #"'" 0 0 14 3 5 #"brown" 0 0 24 3 1 #" " 0 0 21 3 1 #"'" 0 0 14 3 7 #"unknown" 0 0 24 3 1 #" " 0 0 21 3 1 #"'" 0 0 14 3 7 #"unknown" 0 0 24 3 1 #")" 0 0 24 29 1 #"\n" 0 0 24 3 12 #" " 0 0 21 3 1 #"'" 0 0 14 3 7 #"unknown" 0 0 24 3 1 #")" 0 0 24 29 1 #"\n" 0 0 24 29 1 #"\n" 0 0 24 29 1 #"\n" 0 0 17 3 12 #";;; Template" 0 0 24 29 1 #"\n" 0 0 17 3 37 #"; func-for-anc-tree : anc-tree -> ???" 0 0 24 29 1 #"\n" 0 0 17 3 1 #";" 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 17 #"func-for-anc-tree" 0 0 24 3 1 #" " 0 0 14 3 2 #"tr" 0 0 24 3 1 #")" 0 0 24 29 1 #"\n" 0 0 24 3 3 #" (" 0 0 15 3 4 #"cond" 0 0 24 3 3 #" [(" 0 0 14 3 7 #"symbol?" 0 0 24 3 1 #" " 0 0 14 3 2 #"tr" 0 0 24 3 2 #") " 0 0 14 3 3 #"..." 0 0 24 3 1 #"]" 0 0 24 29 1 #"\n" 0 0 24 3 10 #" [(" 0 0 14 3 6 #"child?" 0 0 24 3 1 #" " 0 0 14 3 2 #"tr" 0 0 24 3 4 #") (" 0 0 14 3 3 #"..." 0 0 24 3 1 #"(" 0 0 14 3 10 #"child-name" 0 0 24 3 1 #" " 0 0 14 3 2 #"tr" 0 0 24 3 1 #")" 0 0 24 29 1 #"\n" 0 0 24 3 23 #" " 0 0 14 3 3 #"..." 0 0 24 3 1 #"(" 0 0 14 3 9 #"child-yob" 0 0 24 3 1 #" " 0 0 14 3 2 #"tr" 0 0 24 3 1 #")" 0 0 24 29 1 #"\n" 0 0 24 3 23 #" " 0 0 14 3 3 #"..." 0 0 24 3 1 #"(" 0 0 14 3 9 #"child-eye" 0 0 24 3 1 #" " 0 0 14 3 2 #"tr" 0 0 24 3 1 #")" 0 0 24 29 1 #"\n" 0 0 24 3 23 #" " 0 0 14 3 3 #"..." 0 0 24 3 1 #"(" 0 0 14 3 17 #"func-for-anc-tree" 0 0 24 3 2 #" (" 0 0 14 3 8 #"child-ma" 0 0 24 3 1 #" " 0 0 14 3 2 #"tr" 0 0 24 3 2 #"))" 0 0 24 29 1 #"\n" 0 0 24 3 23 #" " 0 0 14 3 3 #"..." 0 0 24 3 1 #"(" 0 0 14 3 17 #"func-for-anc-tree" 0 0 24 3 2 #" (" 0 0 14 3 8 #"child-pa" 0 0 24 3 1 #" " 0 0 14 3 2 #"tr" 0 0 24 3 3 #")))" 0 0 24 29 1 #"\n" 0 0 24 3 25 #" ]))" 0 0 24 29 1 #"\n" 0 0 24 29 1 #"\n" 0 0 24 29 1 #"\n" 0 0 24 29 1 #"\n" 0 0 24 29 1 #"\n" 0 0 24 29 1 #"\n" 0 0 24 29 1 #"\n" 0 0 24 29 1 #"\n" 0 0 17 3 26 #"; size : AncTree -> natnum" 0 0 24 29 1 #"\n" 0 0 17 3 64 #"; Return the size of `tr` -- the number of `child`s it contains." 0 0 24 29 1 #"\n" 0 0 17 3 1 #";" 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 4 #"size" 0 0 24 3 1 #" " 0 0 14 3 2 #"tr" 0 0 24 3 1 #")" 0 0 24 29 1 #"\n" 0 0 24 3 3 #" (" 0 0 15 3 4 #"cond" 0 0 24 3 3 #" [(" 0 0 14 3 8 #"unknown?" 0 0 24 3 1 #" " 0 0 14 3 2 #"tr" 0 0 24 3 2 #") " 0 0 21 3 1 #"0" 0 0 24 3 1 #"]" 0 0 24 29 1 #"\n" 0 0 24 3 10 #" [(" 0 0 14 3 6 #"child?" 0 0 24 3 1 #" " 0 0 14 3 2 #"tr" 0 0 24 3 4 #") (" 0 0 14 3 1 #"+" 0 0 24 3 2 #" (" 0 0 14 3 4 #"size" 0 0 24 3 2 #" (" 0 0 14 3 8 #"child-ma" 0 0 24 3 1 #" " 0 0 14 3 2 #"tr" 0 0 24 3 2 #"))" 0 0 24 29 1 #"\n" 0 0 24 3 25 #" " 0 0 21 3 1 #"1" 0 0 24 29 1 #"\n" 0 0 24 3 26 #" (" 0 0 14 3 4 #"size" 0 0 24 3 2 #" (" 0 0 14 3 8 #"child-pa" 0 0 24 3 1 #" " 0 0 14 3 2 #"tr" 0 0 24 3 3 #")))" 0 0 24 29 1 #"\n" 0 0 24 3 25 #" ]))" 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 3 2 #" (" 0 0 14 3 4 #"size" 0 0 24 3 1 #" " 0 0 21 3 1 #"'" 0 0 14 3 7 #"unknown" 0 0 24 3 2 #") " 0 0 21 3 1 #"0" 0 0 24 3 1 #")" 0 0 24 29 1 #"\n" 0 0 24 3 1 #"(" 0 0 14 3 12 #"check-expect" 0 0 24 3 2 #" (" 0 0 14 3 4 #"size" 0 0 24 3 2 #" (" 0 0 14 3 10 #"make-child" 0 0 24 3 1 #" " 0 0 19 3 5 #"\"Abe\"" 0 0 24 3 1 #" " 0 0 21 3 4 #"1920" 0 0 24 3 1 #" " 0 0 21 3 1 #"'" 0 0 14 3 5 #"brown" 0 0 24 3 1 #" " 0 0 21 3 1 #"'" 0 0 14 3 7 #"unknown" 0 0 24 3 1 #" " 0 0 21 3 1 #"'" 0 0 14 3 7 #"unknown" 0 0 24 3 2 #"))" 0 0 24 29 1 #"\n" 0 0 24 3 14 #" " 0 0 21 3 1 #"1" 0 0 24 3 1 #")" 0 0 24 29 1 #"\n" 0 0 24 3 1 #"(" 0 0 14 3 12 #"check-expect" 0 0 24 3 2 #" (" 0 0 14 3 4 #"size" 0 0 24 3 2 #" (" 0 0 14 3 10 #"make-child" 0 0 24 3 1 #" " 0 0 19 3 7 #"\"Homer\"" 0 0 24 29 1 #"\n" 0 0 24 3 32 #" " 0 0 21 3 4 #"1955" 0 0 24 29 1 #"\n" 0 0 24 3 32 #" " 0 0 21 3 1 #"'" 0 0 14 3 5 #"brown" 0 0 24 3 1 #" " 0 0 24 29 1 #"\n" 0 0 24 3 32 #" " 0 0 21 3 1 #"'" 0 0 14 3 7 #"unknown" 0 0 24 29 1 #"\n" 0 0 24 3 33 #" (" 0 0 14 3 10 #"make-child" 0 0 24 3 1 #" " 0 0 19 3 5 #"\"Abe\"" 0 0 24 3 1 #" " 0 0 21 3 4 #"1920" 0 0 24 3 1 #" " 0 0 21 3 1 #"'" 0 0 14 3 5 #"brown" 0 0 24 3 1 #" " 0 0 21 3 1 #"'" 0 0 14 3 7 #"unknown" 0 0 24 3 1 #" " 0 0 21 3 1 #"'" 0 0 14 3 7 #"unknown" 0 0 24 3 3 #")))" 0 0 24 29 1 #"\n" 0 0 24 3 14 #" " 0 0 21 3 1 #"2" 0 0 24 3 1 #")" 0 0 24 29 1 #"\n" 0 0 24 29 1 #"\n" 0 0 24 29 1 #"\n" 0 0 24 29 1 #"\n" 0 0 17 3 34 #"; examples of data, for anc-trees:" 0 0 24 29 1 #"\n" 0 0 21 3 1 #"'" 0 0 14 3 7 #"unknown" 0 0 24 29 1 #"\n" 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 3 #"abe" 0 0 24 3 2 #" (" 0 0 14 3 10 #"make-child" 0 0 24 3 1 #" " 0 0 19 3 5 #"\"Abe\"" 0 0 24 3 1 #" " 0 0 21 3 4 #"1920" 0 0 24 3 1 #" " 0 0 21 3 1 #"'" 0 0 14 3 4 #"blue" 0 0 24 3 1 #" " 0 0 21 3 1 #"'" 0 0 14 3 7 #"unknown" 0 0 24 3 1 #" " 0 0 21 3 1 #"'" 0 0 14 3 7 #"unknown" 0 0 24 3 2 #"))" 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 #"mona" 0 0 24 3 2 #" (" 0 0 14 3 10 #"make-child" 0 0 24 3 1 #" " 0 0 19 3 6 #"\"Mona\"" 0 0 24 3 1 #" " 0 0 21 3 4 #"1929" 0 0 24 3 1 #" " 0 0 21 3 1 #"'" 0 0 14 3 5 #"brown" 0 0 24 3 1 #" " 0 0 21 3 1 #"'" 0 0 14 3 7 #"unknown" 0 0 24 3 1 #" " 0 0 21 3 1 #"'" 0 0 14 3 7 #"unknown" 0 0 24 3 2 #"))" 0 0 24 29 1 #"\n" 0 0 24 29 1 #"\n" 0 0 24 3 1 #"(" 0 0 14 3 10 #"make-child" 0 0 24 3 1 #" " 0 0 19 3 7 #"\"homer\"" 0 0 24 3 1 #" " 0 0 21 3 4 #"1955" 0 0 24 3 1 #" " 0 0 21 3 1 #"'" 0 0 14 3 5 #"brown" 0 0 24 3 1 #" " 0 0 24 29 1 #"\n" 0 0 24 3 13 #" (" 0 0 14 3 10 #"make-child" 0 0 24 3 1 #" " 0 0 19 3 6 #"\"Mona\"" 0 0 24 3 1 #" " 0 0 21 3 4 #"1929" 0 0 24 3 1 #" " 0 0 21 3 1 #"'" 0 0 14 3 5 #"brown" 0 0 24 3 1 #" " 0 0 21 3 1 #"'" 0 0 14 3 7 #"unknown" 0 0 24 3 1 #" " 0 0 21 3 1 #"'" 0 0 14 3 6 #"unkown" 0 0 24 3 1 #")" 0 0 24 29 1 #"\n" 0 0 24 3 13 #" (" 0 0 14 3 10 #"make-child" 0 0 24 3 1 #" " 0 0 19 3 5 #"\"Abe\"" 0 0 24 3 1 #" " 0 0 21 3 4 #"1920" 0 0 24 3 1 #" " 0 0 21 3 1 #"'" 0 0 14 3 4 #"blue" 0 0 24 3 1 #" " 0 0 21 3 1 #"'" 0 0 14 3 7 #"unknown" 0 0 24 3 1 #" " 0 0 21 3 1 #"'" 0 0 14 3 7 #"unknown" 0 0 24 3 2 #"))" 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 5 #"homer" 0 0 24 3 2 #" (" 0 0 14 3 10 #"make-child" 0 0 24 3 1 #" " 0 0 19 3 7 #"\"Homer\"" 0 0 24 3 1 #" " 0 0 21 3 4 #"1955" 0 0 24 3 1 #" " 0 0 21 3 1 #"'" 0 0 14 3 5 #"brown" 0 0 24 3 1 #" " 0 0 14 3 4 #"mona" 0 0 24 3 1 #" " 0 0 14 3 3 #"abe" 0 0 24 3 2 #"))" 0 0 24 29 1 #"\n" 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 6 #"jackie" 0 0 24 3 2 #" (" 0 0 14 3 10 #"make-child" 0 0 24 3 1 #" " 0 0 19 3 8 #"\"Jackie\"" 0 0 24 3 1 #" " 0 0 21 3 4 #"1926" 0 0 24 3 1 #" " 0 0 21 3 1 #"'" 0 0 14 3 5 #"brown" 0 0 24 3 1 #" " 0 0 21 3 1 #"'" 0 0 14 3 7 #"unknown" 0 0 24 3 1 #" " 0 0 21 3 1 #"'" 0 0 14 3 7 #"unknown" 0 0 24 3 2 #"))" 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 5 #"marge" 0 0 24 3 2 #" (" 0 0 14 3 10 #"make-child" 0 0 24 3 1 #" " 0 0 19 3 7 #"\"Marge\"" 0 0 24 3 1 #" " 0 0 21 3 4 #"1956" 0 0 24 3 1 #" " 0 0 21 3 1 #"'" 0 0 14 3 4 #"blue" 0 0 24 3 1 #" " 0 0 14 3 6 #"jackie" 0 0 24 3 1 #" " 0 0 21 3 1 #"'" 0 0 14 3 7 #"unknown" 0 0 24 3 2 #"))" 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 #"bart" 0 0 24 3 2 #" (" 0 0 14 3 10 #"make-child" 0 0 24 3 1 #" " 0 0 19 3 6 #"\"Bart\"" 0 0 24 3 1 #" " 0 0 21 3 4 #"1979" 0 0 24 3 1 #" " 0 0 21 3 1 #"'" 0 0 14 3 5 #"brown" 0 0 24 3 1 #" " 0 0 14 3 5 #"marge" 0 0 24 3 1 #" " 0 0 14 3 5 #"homer" 0 0 24 3 2 #"))" 0 0 24 29 1 #"\n" 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 3 2 #" (" 0 0 14 3 4 #"size" 0 0 24 3 1 #" " 0 0 21 3 1 #"'" 0 0 14 3 7 #"unknown" 0 0 24 3 2 #") " 0 0 21 3 1 #"0" 0 0 24 3 1 #")" 0 0 24 29 1 #"\n" 0 0 24 3 1 #"(" 0 0 14 3 12 #"check-expect" 0 0 24 3 2 #" (" 0 0 14 3 4 #"size" 0 0 24 3 1 #" " 0 0 14 3 6 #"jackie" 0 0 24 3 2 #") " 0 0 21 3 1 #"1" 0 0 24 3 1 #")" 0 0 24 29 1 #"\n" 0 0 24 3 1 #"(" 0 0 14 3 12 #"check-expect" 0 0 24 3 2 #" (" 0 0 14 3 4 #"size" 0 0 24 3 1 #" " 0 0 14 3 5 #"marge" 0 0 24 3 2 #") " 0 0 21 3 1 #"2" 0 0 24 3 1 #")" 0 0 24 29 1 #"\n" 0 0 24 3 1 #"(" 0 0 14 3 12 #"check-expect" 0 0 24 3 2 #" (" 0 0 14 3 4 #"size" 0 0 24 3 1 #" " 0 0 14 3 5 #"homer" 0 0 24 3 2 #") " 0 0 21 3 1 #"3" 0 0 24 3 1 #")" 0 0 24 29 1 #"\n" 0 0 24 3 1 #"(" 0 0 14 3 12 #"check-expect" 0 0 24 3 2 #" (" 0 0 14 3 4 #"size" 0 0 24 3 1 #" " 0 0 14 3 4 #"bart" 0 0 24 3 2 #") " 0 0 21 3 1 #"6" 0 0 24 3 1 #")" 0 0 24 29 1 #"\n" 0 0 24 29 1 #"\n" 0 0 24 29 1 #"\n" 0 0 24 29 1 #"\n" 0 0 17 3 25 #"; unknown? ANY -> boolean" 0 0 24 29 1 #"\n" 0 0 17 3 50 #"; Is x [a representation of] the unknown Anc-Tree?" 0 0 24 29 1 #"\n" 0 0 17 3 1 #";" 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 8 #"unknown?" 0 0 24 3 1 #" " 0 0 14 3 1 #"x" 0 0 24 3 3 #") (" 0 0 14 3 6 #"equal?" 0 0 24 3 1 #" " 0 0 14 3 1 #"x" 0 0 24 3 1 #" " 0 0 21 3 1 #"'" 0 0 14 3 7 #"unknown" 0 0 24 3 3 #")) " 0 0 17 3 35 #"; why not symbol? why not symbol=?" 0 0 24 29 1 #"\n" 0 0 17 3 38 #";(define (unknown? x) (and (symbol? x)" 0 0 24 29 1 #"\n" 0 0 17 3 50 #"; (symbol=? x 'unknown)))" 0 0 24 29 1 #"\n" 0 0 17 3 1 #";" 0 0 24 29 1 #"\n" 0 0 17 3 34 #"; Cf.: and example of using and/f:" 0 0 24 29 1 #"\n" 0 0 17 3 66 ( #";(define unknown? (and/f symbol? (\316\273 (s) (symbol=? s 'unknown)" #"))) " ) 0 0 24 29 1 #"\n" 0 0 24 29 1 #"\n" 0 0 24 29 1 #"\n" 0 0 24 29 1 #"\n" 0 0 24 29 1 #"\n" 0 0 24 29 1 #"\n" 0 0 17 3 51 #"; change-name : anc-tree string string -> anc-tree" 0 0 24 29 1 #"\n" 0 0 17 3 76 ( #"; Return a tree like `anc`, but with every name `name1` replace with" #" `name2`" ) 0 0 24 29 1 #"\n" 0 0 17 3 1 #";" 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 11 #"change-name" 0 0 24 3 1 #" " 0 0 14 3 3 #"anc" 0 0 24 3 1 #" " 0 0 14 3 5 #"name1" 0 0 24 3 1 #" " 0 0 14 3 5 #"name2" 0 0 24 3 1 #")" 0 0 24 29 1 #"\n" 0 0 24 3 3 #" (" 0 0 15 3 4 #"cond" 0 0 24 3 3 #" [(" 0 0 14 3 8 #"unknown?" 0 0 24 3 1 #" " 0 0 14 3 3 #"anc" 0 0 24 3 2 #") " 0 0 21 3 1 #"'" 0 0 14 3 7 #"unknown" 0 0 24 3 1 #"]" 0 0 24 29 1 #"\n" 0 0 24 3 10 #" [(" 0 0 14 3 6 #"child?" 0 0 24 3 1 #" " 0 0 14 3 3 #"anc" 0 0 24 3 3 #") (" 0 0 14 3 10 #"make-child" 0 0 24 3 2 #" (" 0 0 14 3 2 #"if" 0 0 24 3 2 #" (" 0 0 14 3 8 #"string=?" 0 0 24 3 2 #" (" 0 0 14 3 10 #"child-name" 0 0 24 3 1 #" " 0 0 14 3 3 #"anc" 0 0 24 3 2 #") " 0 0 14 3 5 #"name1" 0 0 24 3 1 #")" 0 0 24 29 1 #"\n" 0 0 24 3 38 #" " 0 0 14 3 5 #"name2" 0 0 24 29 1 #"\n" 0 0 24 3 39 #" (" 0 0 14 3 10 #"child-name" 0 0 24 3 1 #" " 0 0 14 3 3 #"anc" 0 0 24 3 2 #"))" 0 0 24 29 1 #"\n" 0 0 24 3 35 #" (" 0 0 14 3 9 #"child-yob" 0 0 24 3 1 #" " 0 0 14 3 3 #"anc" 0 0 24 3 1 #")" 0 0 24 29 1 #"\n" 0 0 24 3 35 #" (" 0 0 14 3 9 #"child-eye" 0 0 24 3 1 #" " 0 0 14 3 3 #"anc" 0 0 24 3 1 #")" 0 0 24 29 1 #"\n" 0 0 24 3 35 #" (" 0 0 14 3 11 #"change-name" 0 0 24 3 2 #" (" 0 0 14 3 8 #"child-ma" 0 0 24 3 1 #" " 0 0 14 3 3 #"anc" 0 0 24 3 2 #") " 0 0 14 3 5 #"name1" 0 0 24 3 1 #" " 0 0 14 3 5 #"name2" 0 0 24 3 1 #")" 0 0 24 29 1 #"\n" 0 0 24 3 35 #" (" 0 0 14 3 11 #"change-name" 0 0 24 3 2 #" (" 0 0 14 3 8 #"child-pa" 0 0 24 3 1 #" " 0 0 14 3 3 #"anc" 0 0 24 3 2 #") " 0 0 14 3 5 #"name1" 0 0 24 3 1 #" " 0 0 14 3 5 #"name2" 0 0 24 3 5 #"))]))" 0 0 24 29 1 #"\n" 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 3 2 #" (" 0 0 14 3 11 #"change-name" 0 0 24 3 1 #" " 0 0 21 3 1 #"'" 0 0 14 3 7 #"unknown" 0 0 24 3 1 #" " 0 0 19 3 8 #"\"Joseph\"" 0 0 24 3 1 #" " 0 0 19 3 6 #"\"Joey\"" 0 0 24 3 1 #")" 0 0 24 29 1 #"\n" 0 0 24 3 14 #" " 0 0 21 3 1 #"'" 0 0 14 3 7 #"unknown" 0 0 24 3 1 #")" 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 3 2 #" (" 0 0 14 3 11 #"change-name" 0 0 24 3 1 #" " 0 0 14 3 6 #"jackie" 0 0 24 3 1 #" " 0 0 19 3 8 #"\"Joseph\"" 0 0 24 3 1 #" " 0 0 19 3 6 #"\"Joey\"" 0 0 24 3 2 #") " 0 0 14 3 6 #"jackie" 0 0 24 3 1 #")" 0 0 24 29 1 #"\n" 0 0 24 3 1 #"(" 0 0 14 3 12 #"check-expect" 0 0 24 3 2 #" (" 0 0 14 3 11 #"change-name" 0 0 24 3 1 #" " 0 0 14 3 6 #"jackie" 0 0 24 3 1 #" " 0 0 19 3 8 #"\"Jackie\"" 0 0 24 3 1 #" " 0 0 19 3 6 #"\"Jack\"" 0 0 24 3 1 #")" 0 0 24 29 1 #"\n" 0 0 24 3 15 #" (" 0 0 14 3 10 #"make-child" 0 0 24 3 1 #" " 0 0 19 3 6 #"\"Jack\"" 0 0 24 3 1 #" " 0 0 21 3 4 #"1926" 0 0 24 3 1 #" " 0 0 21 3 1 #"'" 0 0 14 3 5 #"brown" 0 0 24 3 1 #" " 0 0 21 3 1 #"'" 0 0 14 3 7 #"unknown" 0 0 24 3 1 #" " 0 0 21 3 1 #"'" 0 0 14 3 7 #"unknown" 0 0 24 3 2 #"))" 0 0 24 29 1 #"\n" 0 0 24 3 1 #"(" 0 0 14 3 12 #"check-expect" 0 0 24 3 2 #" (" 0 0 14 3 11 #"change-name" 0 0 24 29 1 #"\n" 0 0 24 3 16 #" (" 0 0 14 3 10 #"make-child" 0 0 24 3 1 #" " 0 0 19 3 8 #"\"Joseph\"" 0 0 24 29 1 #"\n" 0 0 24 3 27 #" " 0 0 21 3 2 #"50" 0 0 24 29 1 #"\n" 0 0 24 3 27 #" " 0 0 21 3 1 #"'" 0 0 14 3 4 #"blue" 0 0 24 29 1 #"\n" 0 0 24 3 28 #" (" 0 0 14 3 10 #"make-child" 0 0 24 3 1 #" " 0 0 19 3 5 #"\"Amy\"" 0 0 24 29 1 #"\n" 0 0 24 3 39 #" " 0 0 21 3 2 #"50" 0 0 24 29 1 #"\n" 0 0 24 3 39 #" " 0 0 21 3 1 #"'" 0 0 14 3 4 #"blue" 0 0 24 29 1 #"\n" 0 0 24 3 40 #" (" 0 0 14 3 10 #"make-child" 0 0 24 3 1 #" " 0 0 19 3 8 #"\"Joseph\"" 0 0 24 3 1 #" " 0 0 21 3 2 #"50" 0 0 24 3 1 #" " 0 0 21 3 1 #"'" 0 0 14 3 4 #"blue" 0 0 24 3 1 #" " 0 0 21 3 1 #"'" 0 0 14 3 7 #"unknown" 0 0 24 3 1 #" " 0 0 21 3 1 #"'" 0 0 14 3 7 #"unknown" 0 0 24 3 1 #")" 0 0 24 29 1 #"\n" 0 0 24 3 40 #" (" 0 0 14 3 10 #"make-child" 0 0 24 3 1 #" " 0 0 19 3 6 #"\"Joey\"" 0 0 24 3 1 #" " 0 0 21 3 2 #"50" 0 0 24 3 1 #" " 0 0 21 3 1 #"'" 0 0 14 3 4 #"blue" 0 0 24 3 1 #" " 0 0 21 3 1 #"'" 0 0 14 3 7 #"unknown" 0 0 24 3 1 #" " 0 0 21 3 1 #"'" 0 0 14 3 7 #"unknown" 0 0 24 3 2 #"))" 0 0 24 29 1 #"\n" 0 0 24 3 28 #" (" 0 0 14 3 10 #"make-child" 0 0 24 3 1 #" " 0 0 19 3 8 #"\"Joseph\"" 0 0 24 3 1 #" " 0 0 21 3 2 #"50" 0 0 24 3 1 #" " 0 0 21 3 1 #"'" 0 0 14 3 4 #"blue" 0 0 24 3 1 #" " 0 0 21 3 1 #"'" 0 0 14 3 7 #"unknown" 0 0 24 3 1 #" " 0 0 21 3 1 #"'" 0 0 14 3 7 #"unknown" 0 0 24 3 2 #"))" 0 0 24 29 1 #"\n" 0 0 24 3 27 #" " 0 0 24 29 1 #"\n" 0 0 24 3 15 #" " 0 0 19 3 8 #"\"Joseph\"" 0 0 24 29 1 #"\n" 0 0 24 3 15 #" " 0 0 19 3 6 #"\"Joey\"" 0 0 24 3 1 #")" 0 0 24 29 1 #"\n" 0 0 24 3 15 #" (" 0 0 14 3 10 #"make-child" 0 0 24 3 1 #" " 0 0 19 3 6 #"\"Joey\"" 0 0 24 29 1 #"\n" 0 0 24 3 26 #" " 0 0 21 3 2 #"50" 0 0 24 29 1 #"\n" 0 0 24 3 26 #" " 0 0 21 3 1 #"'" 0 0 14 3 4 #"blue" 0 0 24 29 1 #"\n" 0 0 24 3 27 #" (" 0 0 14 3 10 #"make-child" 0 0 24 3 1 #" " 0 0 19 3 5 #"\"Amy\"" 0 0 24 29 1 #"\n" 0 0 24 3 38 #" " 0 0 21 3 2 #"50" 0 0 24 29 1 #"\n" 0 0 24 3 38 #" " 0 0 21 3 1 #"'" 0 0 14 3 4 #"blue" 0 0 24 29 1 #"\n" 0 0 24 3 39 #" (" 0 0 14 3 10 #"make-child" 0 0 24 3 1 #" " 0 0 19 3 6 #"\"Joey\"" 0 0 24 3 1 #" " 0 0 21 3 2 #"50" 0 0 24 3 1 #" " 0 0 21 3 1 #"'" 0 0 14 3 4 #"blue" 0 0 24 3 1 #" " 0 0 21 3 1 #"'" 0 0 14 3 7 #"unknown" 0 0 24 3 1 #" " 0 0 21 3 1 #"'" 0 0 14 3 7 #"unknown" 0 0 24 3 1 #")" 0 0 24 29 1 #"\n" 0 0 24 3 39 #" (" 0 0 14 3 10 #"make-child" 0 0 24 3 1 #" " 0 0 19 3 6 #"\"Joey\"" 0 0 24 3 1 #" " 0 0 21 3 2 #"50" 0 0 24 3 1 #" " 0 0 21 3 1 #"'" 0 0 14 3 4 #"blue" 0 0 24 3 1 #" " 0 0 21 3 1 #"'" 0 0 14 3 7 #"unknown" 0 0 24 3 1 #" " 0 0 21 3 1 #"'" 0 0 14 3 7 #"unknown" 0 0 24 3 2 #"))" 0 0 24 29 1 #"\n" 0 0 24 3 27 #" (" 0 0 14 3 10 #"make-child" 0 0 24 3 1 #" " 0 0 19 3 6 #"\"Joey\"" 0 0 24 3 1 #" " 0 0 21 3 2 #"50" 0 0 24 3 1 #" " 0 0 21 3 1 #"'" 0 0 14 3 4 #"blue" 0 0 24 3 1 #" " 0 0 21 3 1 #"'" 0 0 14 3 7 #"unknown" 0 0 24 3 1 #" " 0 0 21 3 1 #"'" 0 0 14 3 7 #"unknown" 0 0 24 3 3 #")))" 0 0 24 29 1 #"\n" 0 0 24 3 27 #" " 0 0 24 29 1 #"\n" 0 0 24 29 1 #"\n" 0 0 24 29 1 #"\n" 0 0 24 29 1 #"\n" 0 0 24 29 1 #"\n" 0 0 24 29 1 #"\n" 0 0 24 29 1 #"\n" 0 0 17 3 41 #"; all-names : anc-tree -> (listof string)" 0 0 24 29 1 #"\n" 0 0 17 3 43 #"; Return a list of all the names in a tree." 0 0 24 29 1 #"\n" 0 0 17 3 1 #";" 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 #"all-names" 0 0 24 3 1 #" " 0 0 14 3 3 #"anc" 0 0 24 3 1 #")" 0 0 24 29 1 #"\n" 0 0 24 3 3 #" (" 0 0 15 3 4 #"cond" 0 0 24 3 3 #" [(" 0 0 14 3 8 #"unknown?" 0 0 24 3 1 #" " 0 0 14 3 3 #"anc" 0 0 24 3 2 #") " 0 0 21 3 1 #"'" 0 0 24 3 3 #"()]" 0 0 24 29 1 #"\n" 0 0 24 3 10 #" [(" 0 0 14 3 6 #"child?" 0 0 24 3 1 #" " 0 0 14 3 3 #"anc" 0 0 24 3 5 #") (" 0 0 14 3 6 #"append" 0 0 24 3 2 #" (" 0 0 14 3 9 #"all-names" 0 0 24 3 2 #" (" 0 0 14 3 8 #"child-ma" 0 0 24 3 1 #" " 0 0 14 3 3 #"anc" 0 0 24 3 2 #"))" 0 0 24 29 1 #"\n" 0 0 24 3 33 #" (" 0 0 14 3 4 #"cons" 0 0 24 3 2 #" (" 0 0 14 3 10 #"child-name" 0 0 24 3 1 #" " 0 0 14 3 3 #"anc" 0 0 24 3 2 #") " 0 0 21 3 1 #"'" 0 0 24 3 3 #"())" 0 0 24 29 1 #"\n" 0 0 24 3 33 #" (" 0 0 14 3 9 #"all-names" 0 0 24 3 2 #" (" 0 0 14 3 8 #"child-pa" 0 0 24 3 1 #" " 0 0 14 3 3 #"anc" 0 0 24 3 6 #")))]))" 0 0 24 29 1 #"\n" 0 0 24 3 2 #" " 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 3 2 #" (" 0 0 14 3 9 #"all-names" 0 0 24 3 1 #" " 0 0 21 3 1 #"'" 0 0 14 3 7 #"unknown" 0 0 24 3 2 #") " 0 0 21 3 1 #"'" 0 0 24 3 3 #"())" 0 0 24 29 1 #"\n" 0 0 24 3 1 #"(" 0 0 14 3 12 #"check-expect" 0 0 24 3 2 #" (" 0 0 14 3 9 #"all-names" 0 0 24 3 1 #" " 0 0 14 3 6 #"jackie" 0 0 24 3 3 #") (" 0 0 14 3 4 #"cons" 0 0 24 3 1 #" " 0 0 19 3 8 #"\"Jackie\"" 0 0 24 3 1 #" " 0 0 21 3 1 #"'" 0 0 24 3 5 #"()) )" 0 0 24 29 1 #"\n" 0 0 24 3 1 #"(" 0 0 14 3 12 #"check-expect" 0 0 24 3 2 #" (" 0 0 14 3 4 #"sort" 0 0 24 3 2 #" (" 0 0 14 3 9 #"all-names" 0 0 24 3 1 #" " 0 0 14 3 5 #"marge" 0 0 24 3 2 #") " 0 0 14 3 9 #"string<=?" 0 0 24 3 1 #")" 0 0 24 29 1 #"\n" 0 0 24 3 15 #" (" 0 0 14 3 4 #"sort" 0 0 24 3 2 #" (" 0 0 14 3 4 #"cons" 0 0 24 3 1 #" " 0 0 19 3 8 #"\"Jackie\"" 0 0 24 3 2 #" (" 0 0 14 3 4 #"cons" 0 0 24 3 1 #" " 0 0 19 3 7 #"\"Marge\"" 0 0 24 3 1 #" " 0 0 21 3 1 #"'" 0 0 24 3 5 #"())) " 0 0 14 3 9 #"string<=?" 0 0 24 3 2 #"))" 0 0 24 29 1 #"\n" 0 0 24 3 1 #"(" 0 0 14 3 12 #"check-expect" 0 0 24 3 2 #" (" 0 0 14 3 4 #"sort" 0 0 24 3 2 #" (" 0 0 14 3 9 #"all-names" 0 0 24 3 1 #" " 0 0 14 3 5 #"homer" 0 0 24 3 2 #") " 0 0 14 3 9 #"string<=?" 0 0 24 3 1 #")" 0 0 24 29 1 #"\n" 0 0 24 3 15 #" (" 0 0 14 3 4 #"sort" 0 0 24 3 2 #" (" 0 0 14 3 4 #"cons" 0 0 24 3 1 #" " 0 0 19 3 6 #"\"Mona\"" 0 0 24 3 2 #" (" 0 0 14 3 4 #"cons" 0 0 24 3 1 #" " 0 0 19 3 7 #"\"Homer\"" 0 0 24 3 2 #" (" 0 0 14 3 4 #"cons" 0 0 24 3 1 #" " 0 0 19 3 5 #"\"Abe\"" 0 0 24 3 1 #" " 0 0 21 3 1 #"'" 0 0 24 3 6 #"()))) " 0 0 14 3 9 #"string<=?" 0 0 24 3 2 #"))" 0 0 24 29 1 #"\n" 0 0 24 3 1 #"(" 0 0 14 3 12 #"check-expect" 0 0 24 3 2 #" (" 0 0 14 3 4 #"sort" 0 0 24 3 2 #" (" 0 0 14 3 9 #"all-names" 0 0 24 3 1 #" " 0 0 14 3 4 #"bart" 0 0 24 3 2 #") " 0 0 14 3 9 #"string<=?" 0 0 24 3 1 #")" 0 0 24 29 1 #"\n" 0 0 24 3 15 #" (" 0 0 14 3 4 #"sort" 0 0 24 3 2 #" (" 0 0 14 3 4 #"cons" 0 0 24 3 1 #" " 0 0 19 3 8 #"\"Jackie\"" 0 0 24 3 2 #" (" 0 0 14 3 4 #"cons" 0 0 24 3 1 #" " 0 0 19 3 7 #"\"Marge\"" 0 0 24 3 2 #" (" 0 0 14 3 4 #"cons" 0 0 24 3 1 #" " 0 0 19 3 6 #"\"Bart\"" 0 0 24 3 2 #" (" 0 0 14 3 4 #"cons" 0 0 24 3 1 #" " 0 0 19 3 6 #"\"Mona\"" 0 0 24 3 2 #" (" 0 0 14 3 4 #"cons" 0 0 24 3 1 #" " 0 0 19 3 7 #"\"Homer\"" 0 0 24 3 2 #" (" 0 0 14 3 4 #"cons" 0 0 24 3 1 #" " 0 0 19 3 5 #"\"Abe\"" 0 0 24 3 1 #" " 0 0 21 3 1 #"'" 0 0 24 3 9 #"())))))) " 0 0 14 3 9 #"string<=?" 0 0 24 3 3 #") )" 0 0 24 29 1 #"\n" 0 0 24 29 1 #"\n" 0 0 24 29 1 #"\n" 0 0 24 29 1 #"\n" 0 0 17 3 19 #"; LEFT AS PRACTICE:" 0 0 24 29 1 #"\n" 0 0 17 3 1 #"#" 0 0 17 3 1 #"|" 0 0 17 29 1 #"\n" 0 0 17 3 41 #"; all-childs : anc-tree -> (listof child)" 0 0 17 29 1 #"\n" 0 0 17 3 44 #"; Return a list of all the childs in a tree." 0 0 17 29 1 #"\n" 0 0 17 3 1 #";" 0 0 17 29 1 #"\n" 0 0 17 3 1 #"(" 0 0 17 3 6 #"define" 0 0 17 3 2 #" (" 0 0 17 3 10 #"all-childs" 0 0 17 3 1 #" " 0 0 17 3 3 #"anc" 0 0 17 3 2 #") " 0 0 17 3 3 #"..." 0 0 17 3 1 #")" 0 0 17 29 1 #"\n" 0 0 17 29 1 #"\n" 0 0 17 3 1 #"(" 0 0 17 3 12 #"check-expect" 0 0 17 3 2 #" (" 0 0 17 3 10 #"all-childs" 0 0 17 3 1 #" " 0 0 17 3 1 #"'" 0 0 17 3 7 #"unknown" 0 0 17 3 2 #") " 0 0 17 3 5 #"empty" 0 0 17 3 1 #")" 0 0 17 29 1 #"\n" 0 0 17 3 1 #"(" 0 0 17 3 12 #"check-expect" 0 0 17 3 2 #" (" 0 0 17 3 10 #"all-childs" 0 0 17 3 1 #" " 0 0 17 3 3 #"abe" 0 0 17 3 3 #") (" 0 0 17 3 4 #"list" 0 0 17 3 1 #" " 0 0 17 3 3 #"abe" 0 0 17 3 2 #"))" 0 0 17 29 1 #"\n" 0 0 17 3 1 #"(" 0 0 17 3 12 #"check-expect" 0 0 17 3 2 #" (" 0 0 17 3 10 #"all-childs" 0 0 17 3 1 #" " 0 0 17 3 5 #"homer" 0 0 17 3 3 #") (" 0 0 17 3 4 #"list" 0 0 17 3 1 #" " 0 0 17 3 4 #"mona" 0 0 17 3 1 #" " 0 0 17 3 5 #"homer" 0 0 17 3 1 #" " 0 0 17 3 3 #"abe" 0 0 17 3 2 #"))" 0 0 17 29 1 #"\n" 0 0 17 3 1 #"(" 0 0 17 3 12 #"check-expect" 0 0 17 3 2 #" (" 0 0 17 3 4 #"sort" 0 0 17 3 2 #" (" 0 0 17 3 3 #"map" 0 0 17 3 1 #" " 0 0 17 3 10 #"child-name" 0 0 17 3 2 #" (" 0 0 17 3 10 #"all-childs" 0 0 17 3 1 #" " 0 0 17 3 4 #"bart" 0 0 17 3 2 #") " 0 0 17 3 9 #"string<=?" 0 0 17 3 2 #"))" 0 0 17 29 1 #"\n" 0 0 17 3 15 #" (" 0 0 17 3 4 #"sort" 0 0 17 3 2 #" (" 0 0 17 3 3 #"map" 0 0 17 3 1 #" " 0 0 17 3 10 #"child-name" 0 0 17 3 2 #" (" 0 0 17 3 4 #"list" 0 0 17 3 1 #" " 0 0 17 3 6 #"jackie" 0 0 17 3 1 #" " 0 0 17 3 5 #"marge" 0 0 17 3 1 #" " 0 0 17 3 4 #"bart" 0 0 17 3 1 #" " 0 0 17 3 4 #"mona" 0 0 17 3 1 #" " 0 0 17 3 5 #"homer" 0 0 17 3 1 #" " 0 0 17 3 3 #"abe" 0 0 17 3 3 #")) " 0 0 17 3 9 #"string<=?" 0 0 17 3 2 #"))" 0 0 17 29 1 #"\n" 0 0 17 3 46 #"; Hmm, we should really sort these, as before;" 0 0 17 29 1 #"\n" 0 0 17 3 76 ( #"; we can easily make `child<=?` which just compares to childs based " #"on name." ) 0 0 17 29 1 #"\n" 0 0 17 3 54 #"; OR, we could just extract the names, and sort those." 0 0 17 29 1 #"\n" 0 0 17 3 88 ( #"; (This is imperfect, but reasonable as a hack: if the anc-tree had " #"two different people" ) 0 0 17 29 1 #"\n" 0 0 17 3 82 ( #"; with the same name, and the result instead had one of those in its" #" answer twice," ) 0 0 17 29 1 #"\n" 0 0 17 3 88 ( #"; we wouldn't catch that error. We might even assuage this a bit, b" #"y having a test-case" ) 0 0 17 29 1 #"\n" 0 0 17 3 97 ( #"; with an anc-tree `j` containing only two people j1 and j2, both na" #"med \"Joe\", and asserting that" ) 0 0 17 29 1 #"\n" 0 0 17 3 43 #"; (or (equal? (all-childs j) (list j1 j2))" 0 0 17 29 1 #"\n" 0 0 17 3 44 #"; (equal? (all-childs j) (list j2 j1)))" 0 0 17 29 1 #"\n" 0 0 17 3 93 ( #"; ...though at that point you might as well just have made a `child<" #"=?` and done it properly." ) 0 0 17 29 1 #"\n" 0 0 17 3 2 #"|#" 0 0 24 29 1 #"\n" 0 0 24 29 1 #"\n" 0 0 17 3 22 #"; LEFT AS AN EXERCISE:" 0 0 24 29 1 #"\n" 0 0 17 3 1 #"#" 0 0 17 3 1 #"|" 0 0 17 29 1 #"\n" 0 0 17 3 40 #"; contains? : AncTree, string -> boolean" 0 0 17 29 1 #"\n" 0 0 17 3 49 #"; Does the tree contain the given name, anywhere?" 0 0 17 29 1 #"\n" 0 0 17 3 1 #";" 0 0 17 29 1 #"\n" 0 0 17 3 1 #"(" 0 0 17 3 6 #"define" 0 0 17 3 2 #" (" 0 0 17 3 9 #"contains?" 0 0 17 3 1 #" " 0 0 17 3 3 #"anc" 0 0 17 3 1 #" " 0 0 17 3 6 #"target" 0 0 17 3 2 #") " 0 0 17 3 3 #"..." 0 0 17 3 1 #")" 0 0 17 29 1 #"\n" 0 0 17 29 1 #"\n" 0 0 17 3 42 #";(check-expect (contains? ... \"Bart\") ...)" 0 0 17 29 1 #"\n" 0 0 17 3 1 #"(" 0 0 17 3 12 #"check-expect" 0 0 17 3 2 #" (" 0 0 17 3 9 #"contains?" 0 0 17 3 1 #" " 0 0 17 3 4 #"bart" 0 0 17 3 1 #" " 0 0 17 3 6 #"\"Bart\"" 0 0 17 3 2 #") " 0 0 17 3 4 #"true" 0 0 17 3 1 #")" 0 0 17 29 1 #"\n" 0 0 17 3 1 #"(" 0 0 17 3 12 #"check-expect" 0 0 17 3 2 #" (" 0 0 17 3 9 #"contains?" 0 0 17 3 1 #" " 0 0 17 3 4 #"bart" 0 0 17 3 1 #" " 0 0 17 3 7 #"\"Homer\"" 0 0 17 3 2 #") " 0 0 17 3 4 #"true" 0 0 17 3 1 #")" 0 0 17 29 1 #"\n" 0 0 17 3 1 #"(" 0 0 17 3 12 #"check-expect" 0 0 17 3 2 #" (" 0 0 17 3 9 #"contains?" 0 0 17 3 1 #" " 0 0 17 3 4 #"bart" 0 0 17 3 1 #" " 0 0 17 3 5 #"\"Abe\"" 0 0 17 3 2 #") " 0 0 17 3 4 #"true" 0 0 17 3 1 #")" 0 0 17 29 1 #"\n" 0 0 17 3 1 #"(" 0 0 17 3 12 #"check-expect" 0 0 17 3 2 #" (" 0 0 17 3 9 #"contains?" 0 0 17 3 1 #" " 0 0 17 3 5 #"homer" 0 0 17 3 1 #" " 0 0 17 3 6 #"\"Bart\"" 0 0 17 3 2 #") " 0 0 17 3 5 #"false" 0 0 17 3 1 #")" 0 0 17 29 1 #"\n" 0 0 17 3 2 #" " 0 0 17 29 1 #"\n" 0 0 17 3 1 #"(" 0 0 17 3 12 #"check-expect" 0 0 17 3 2 #" (" 0 0 17 3 9 #"contains?" 0 0 17 3 1 #" " 0 0 17 3 4 #"bart" 0 0 17 3 1 #" " 0 0 17 3 7 #"\"Marge\"" 0 0 17 3 2 #") " 0 0 17 3 4 #"true" 0 0 17 3 1 #")" 0 0 17 29 1 #"\n" 0 0 17 3 1 #"(" 0 0 17 3 12 #"check-expect" 0 0 17 3 2 #" (" 0 0 17 3 9 #"contains?" 0 0 17 3 1 #" " 0 0 17 3 4 #"bart" 0 0 17 3 1 #" " 0 0 17 3 6 #"\"Mona\"" 0 0 17 3 2 #") " 0 0 17 3 4 #"true" 0 0 17 3 1 #")" 0 0 17 29 1 #"\n" 0 0 17 3 1 #"(" 0 0 17 3 12 #"check-expect" 0 0 17 3 2 #" (" 0 0 17 3 9 #"contains?" 0 0 17 3 1 #" " 0 0 17 3 4 #"mona" 0 0 17 3 1 #" " 0 0 17 3 6 #"\"Bart\"" 0 0 17 3 2 #") " 0 0 17 3 5 #"false" 0 0 17 3 1 #")" 0 0 17 29 1 #"\n" 0 0 17 3 2 #"|#" 0 0 24 29 1 #"\n" 0 0 24 29 1 #"\n" 0 0 17 3 48 #"; challenge: write my-append: list, list -> list" 0 0 24 29 1 #"\n" 0 0 17 3 40 #"; (Hint: follow the template for a list," 0 0 24 29 1 #"\n" 0 0 17 3 37 #"; but only take first/rest of arg1.)" 0 0 24 29 1 #"\n" 0 0 24 29 1 #"\n" 0 0 24 29 1 #"\n" 0 0 24 29 1 #"\n" 0 0 24 29 1 #"\n" 0 0 24 29 1 #"\n" 0 0 17 3 30 #";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;" 0 0 24 29 1 #"\n" 0 0 17 3 64 #"; When traversing trees, many traditional (non-functional) books" 0 0 24 29 1 #"\n" 0 0 17 3 66 #"; want to have a node-method do more than just call methods on its" 0 0 24 29 1 #"\n" 0 0 17 3 67 #"; children; they want to reach down to its fields and do work using" 0 0 24 29 1 #"\n" 0 0 17 3 69 ( #"; their info. The problem is, this requires ANOTHER check of whethe" #"r" ) 0 0 24 29 1 #"\n" 0 0 17 3 71 ( #"; the children are unknown-vs-Child -- the equivalent of a nested-co" #"nd." ) 0 0 24 29 1 #"\n" 0 0 17 3 27 #"; That doesn't smell right." 0 0 24 29 1 #"\n" 0 0 17 3 1 #";" 0 0 24 29 1 #"\n" 0 0 17 3 68 #"; It turns out, these problems can often be easily fixed by cleverly" 0 0 24 29 1 #"\n" 0 0 17 3 73 ( #"; choosing a helper-function that takes in the node's info when recu" #"rring" ) 0 0 24 29 1 #"\n" 0 0 17 3 16 #"; on its fields." 0 0 24 29 1 #"\n" 0 0 17 3 24 #"; Here are two examples:" 0 0 24 29 1 #"\n" 0 0 24 29 1 #"\n" 0 0 24 29 1 #"\n" 0 0 17 3 43 #"; any-time-travelers? : anc-tree -> boolean" 0 0 24 29 1 #"\n" 0 0 17 3 41 #"; (anybody born before their parents?)(*)" 0 0 24 29 1 #"\n" 0 0 17 3 1 #";" 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 19 #"any-time-travelers?" 0 0 24 3 1 #" " 0 0 14 3 3 #"anc" 0 0 24 3 1 #")" 0 0 24 29 1 #"\n" 0 0 24 3 3 #" (" 0 0 14 3 31 #"any-time-travelers-before-year?" 0 0 24 3 1 #" " 0 0 14 3 3 #"anc" 0 0 24 3 1 #" " 0 0 21 3 6 #"+inf.0" 0 0 24 3 2 #"))" 0 0 24 29 1 #"\n" 0 0 24 29 1 #"\n" 0 0 17 3 60 #"; any-time-travelers-before-year? : anc-tree, int -> boolean" 0 0 24 29 1 #"\n" 0 0 17 3 74 ( #"; Are there either: somebody in the tree with a yob before their par" #"ent's," ) 0 0 24 29 1 #"\n" 0 0 17 3 45 #"; OR the root's yob is later than `last-year`" 0 0 24 29 1 #"\n" 0 0 17 3 1 #";" 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 31 #"any-time-travelers-before-year?" 0 0 24 3 1 #" " 0 0 14 3 3 #"anc" 0 0 24 3 1 #" " 0 0 14 3 9 #"last-year" 0 0 24 3 1 #")" 0 0 24 29 1 #"\n" 0 0 24 3 3 #" (" 0 0 15 3 4 #"cond" 0 0 24 3 3 #" [(" 0 0 14 3 8 #"unknown?" 0 0 24 3 1 #" " 0 0 14 3 3 #"anc" 0 0 24 3 2 #") " 0 0 14 3 5 #"false" 0 0 24 3 1 #"]" 0 0 24 29 1 #"\n" 0 0 24 3 10 #" [(" 0 0 14 3 6 #"child?" 0 0 24 3 1 #" " 0 0 14 3 3 #"anc" 0 0 24 3 3 #") " 0 0 17 3 59 #"; We can't compare our yob with (child-yob (child-ma anc))," 0 0 24 29 1 #"\n" 0 0 24 3 23 #" " 0 0 17 3 42 #"; because ma and pa might each be Unknown." 0 0 24 29 1 #"\n" 0 0 24 3 23 #" " 0 0 17 3 61 #"; rather than add two more sub-cases here, we'll pass our yob" 0 0 24 29 1 #"\n" 0 0 24 3 23 #" " 0 0 17 3 27 #"; to each of the sub-calls." 0 0 24 29 1 #"\n" 0 0 24 3 24 #" (" 0 0 14 3 2 #"or" 0 0 24 3 2 #" (" 0 0 14 3 1 #">" 0 0 24 3 2 #" (" 0 0 14 3 9 #"child-yob" 0 0 24 3 1 #" " 0 0 14 3 3 #"anc" 0 0 24 3 2 #") " 0 0 14 3 9 #"last-year" 0 0 24 3 1 #")" 0 0 24 29 1 #"\n" 0 0 24 3 28 #" (" 0 0 14 3 31 #"any-time-travelers-before-year?" 0 0 24 3 2 #" (" 0 0 14 3 8 #"child-ma" 0 0 24 3 1 #" " 0 0 14 3 3 #"anc" 0 0 24 3 3 #") (" 0 0 14 3 9 #"child-yob" 0 0 24 3 1 #" " 0 0 14 3 3 #"anc" 0 0 24 3 2 #"))" 0 0 24 29 1 #"\n" 0 0 24 3 28 #" (" 0 0 14 3 31 #"any-time-travelers-before-year?" 0 0 24 3 2 #" (" 0 0 14 3 8 #"child-pa" 0 0 24 3 1 #" " 0 0 14 3 3 #"anc" 0 0 24 3 3 #") (" 0 0 14 3 9 #"child-yob" 0 0 24 3 1 #" " 0 0 14 3 3 #"anc" 0 0 24 3 6 #")))]))" 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 3 2 #" (" 0 0 14 3 19 #"any-time-travelers?" 0 0 24 3 1 #" " 0 0 21 3 1 #"'" 0 0 14 3 7 #"unknown" 0 0 24 3 2 #") " 0 0 21 3 6 #"#false" 0 0 24 3 1 #")" 0 0 24 29 1 #"\n" 0 0 24 3 1 #"(" 0 0 14 3 12 #"check-expect" 0 0 24 3 2 #" (" 0 0 14 3 19 #"any-time-travelers?" 0 0 24 3 1 #" " 0 0 14 3 3 #"abe" 0 0 24 3 2 #") " 0 0 21 3 6 #"#false" 0 0 24 3 1 #")" 0 0 24 29 1 #"\n" 0 0 24 3 1 #"(" 0 0 14 3 12 #"check-expect" 0 0 24 3 2 #" (" 0 0 14 3 19 #"any-time-travelers?" 0 0 24 3 2 #" (" 0 0 14 3 10 #"make-child" 0 0 24 3 1 #" " 0 0 19 3 8 #"\"lexxor\"" 0 0 24 3 1 #" " 0 0 21 3 4 #"1801" 0 0 24 3 1 #" " 0 0 19 3 8 #"\"orange\"" 0 0 24 3 1 #" " 0 0 24 29 1 #"\n" 0 0 24 3 48 #" (" 0 0 14 3 10 #"make-child" 0 0 24 3 1 #" " 0 0 19 3 8 #"\"Scully\"" 0 0 24 3 1 #" " 0 0 21 3 4 #"1970" 0 0 24 3 1 #" " 0 0 19 3 7 #"\"brown\"" 0 0 24 3 1 #" " 0 0 21 3 1 #"'" 0 0 14 3 7 #"unknown" 0 0 24 3 1 #" " 0 0 21 3 1 #"'" 0 0 14 3 7 #"unknown" 0 0 24 3 1 #")" 0 0 24 29 1 #"\n" 0 0 24 3 47 #" " 0 0 21 3 1 #"'" 0 0 14 3 7 #"unknown" 0 0 24 3 2 #"))" 0 0 24 29 1 #"\n" 0 0 24 3 14 #" " 0 0 21 3 5 #"#true" 0 0 24 3 1 #")" 0 0 24 29 1 #"\n" 0 0 24 29 1 #"\n" 0 0 24 29 1 #"\n" 0 0 24 29 1 #"\n" 0 0 24 29 1 #"\n" 0 0 24 29 1 #"\n" 0 0 17 3 30 #"; entitle : AncTree -> AncTree" 0 0 24 29 1 #"\n" 0 0 17 3 71 ( #"; Add \"Mr.\" in front of each father's name, and \"Ms.\" to each mo" #"ther's," ) 0 0 24 29 1 #"\n" 0 0 17 3 47 #"; ... and \"Baby\" in front of the root's name." 0 0 24 29 1 #"\n" 0 0 17 3 55 #"; (Cf. walking an html tree and making some transform.)" 0 0 24 29 1 #"\n" 0 0 17 3 1 #";" 0 0 24 29 1 #"\n" 0 0 17 3 1 #";" 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 7 #"entitle" 0 0 24 3 1 #" " 0 0 14 3 3 #"anc" 0 0 24 3 1 #")" 0 0 24 29 1 #"\n" 0 0 24 3 3 #" (" 0 0 14 3 12 #"entitle-help" 0 0 24 3 1 #" " 0 0 14 3 3 #"anc" 0 0 24 3 1 #" " 0 0 19 3 6 #"\"Baby\"" 0 0 24 3 2 #"))" 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 2 #" (" 0 0 14 3 12 #"entitle-help" 0 0 24 3 1 #" " 0 0 14 3 3 #"anc" 0 0 24 3 1 #" " 0 0 14 3 14 #"title-for-root" 0 0 24 3 1 #")" 0 0 24 29 1 #"\n" 0 0 24 3 3 #" (" 0 0 15 3 4 #"cond" 0 0 24 3 3 #" [(" 0 0 14 3 8 #"unknown?" 0 0 24 3 1 #" " 0 0 14 3 3 #"anc" 0 0 24 3 2 #") " 0 0 21 3 1 #"'" 0 0 14 3 7 #"unknown" 0 0 24 3 1 #"]" 0 0 24 29 1 #"\n" 0 0 24 3 10 #" [(" 0 0 14 3 6 #"child?" 0 0 24 3 1 #" " 0 0 14 3 3 #"anc" 0 0 24 3 3 #") " 0 0 17 3 60 #"; We can't know if we are part of somebody else's 'ma' field" 0 0 24 29 1 #"\n" 0 0 24 3 23 #" " 0 0 17 3 60 #"; or their 'pa' field. Rather than try to add back-pointers" 0 0 24 29 1 #"\n" 0 0 24 3 23 #" " 0 0 17 3 56 #"; to the tree, the caller can pass one thing to its pa's" 0 0 24 29 1 #"\n" 0 0 24 3 23 #" " 0 0 17 3 36 #"; and a different thing to its ma's:" 0 0 24 29 1 #"\n" 0 0 24 3 24 #" (" 0 0 14 3 10 #"make-child" 0 0 24 3 2 #" (" 0 0 14 3 13 #"string-append" 0 0 24 3 1 #" " 0 0 14 3 14 #"title-for-root" 0 0 24 3 1 #" " 0 0 19 3 3 #"\" \"" 0 0 24 3 2 #" (" 0 0 14 3 10 #"child-name" 0 0 24 3 1 #" " 0 0 14 3 3 #"anc" 0 0 24 3 2 #"))" 0 0 24 29 1 #"\n" 0 0 24 3 36 #" (" 0 0 14 3 9 #"child-yob" 0 0 24 3 1 #" " 0 0 14 3 3 #"anc" 0 0 24 3 1 #")" 0 0 24 29 1 #"\n" 0 0 24 3 36 #" (" 0 0 14 3 9 #"child-eye" 0 0 24 3 1 #" " 0 0 14 3 3 #"anc" 0 0 24 3 1 #")" 0 0 24 29 1 #"\n" 0 0 24 3 36 #" (" 0 0 14 3 12 #"entitle-help" 0 0 24 3 2 #" (" 0 0 14 3 8 #"child-ma" 0 0 24 3 1 #" " 0 0 14 3 3 #"anc" 0 0 24 3 2 #") " 0 0 19 3 5 #"\"Ms.\"" 0 0 24 3 1 #")" 0 0 24 29 1 #"\n" 0 0 24 3 36 #" (" 0 0 14 3 12 #"entitle-help" 0 0 24 3 2 #" (" 0 0 14 3 8 #"child-pa" 0 0 24 3 1 #" " 0 0 14 3 3 #"anc" 0 0 24 3 2 #") " 0 0 19 3 5 #"\"Mr.\"" 0 0 24 3 5 #"))]))" 0 0 24 29 1 #"\n" 0 0 24 29 1 #"\n" 0 0 24 3 2 #" " 0 0 24 29 1 #"\n" 0 0 24 3 1 #"(" 0 0 14 3 12 #"check-expect" 0 0 24 3 2 #" (" 0 0 14 3 7 #"entitle" 0 0 24 3 1 #" " 0 0 21 3 1 #"'" 0 0 14 3 7 #"unknown" 0 0 24 3 2 #") " 0 0 21 3 1 #"'" 0 0 14 3 7 #"unknown" 0 0 24 3 1 #")" 0 0 24 29 1 #"\n" 0 0 24 3 1 #"(" 0 0 14 3 12 #"check-expect" 0 0 24 3 2 #" (" 0 0 14 3 7 #"entitle" 0 0 24 3 1 #" " 0 0 14 3 5 #"homer" 0 0 24 3 1 #")" 0 0 24 29 1 #"\n" 0 0 24 3 15 #" (" 0 0 14 3 10 #"make-child" 0 0 24 3 1 #" " 0 0 19 3 12 #"\"Baby Homer\"" 0 0 24 3 1 #" " 0 0 21 3 4 #"1955" 0 0 24 3 1 #" " 0 0 21 3 1 #"'" 0 0 14 3 5 #"brown" 0 0 24 29 1 #"\n" 0 0 24 3 27 #" (" 0 0 14 3 10 #"make-child" 0 0 24 3 1 #" " 0 0 19 3 10 #"\"Ms. Mona\"" 0 0 24 3 1 #" " 0 0 21 3 4 #"1929" 0 0 24 3 1 #" " 0 0 21 3 1 #"'" 0 0 14 3 5 #"brown" 0 0 24 3 1 #" " 0 0 21 3 1 #"'" 0 0 14 3 7 #"unknown" 0 0 24 3 1 #" " 0 0 21 3 1 #"'" 0 0 14 3 7 #"unknown" 0 0 24 3 1 #")" 0 0 24 29 1 #"\n" 0 0 24 3 27 #" (" 0 0 14 3 10 #"make-child" 0 0 24 3 1 #" " 0 0 19 3 9 #"\"Mr. Abe\"" 0 0 24 3 1 #" " 0 0 21 3 4 #"1920" 0 0 24 3 1 #" " 0 0 21 3 1 #"'" 0 0 14 3 4 #"blue" 0 0 24 3 1 #" " 0 0 21 3 1 #"'" 0 0 14 3 7 #"unknown" 0 0 24 3 1 #" " 0 0 21 3 1 #"'" 0 0 14 3 7 #"unknown" 0 0 24 3 3 #")))" 0 0 24 29 1 #"\n" 0 0 24 29 1 #"\n" 0 0 17 3 50 #"; challenge: write 'any-duplicates', which returns" 0 0 24 29 1 #"\n" 0 0 17 3 50 #"; whether there are two childs with the same name," 0 0 24 29 1 #"\n" 0 0 17 3 38 #"; where one is an ancestor of another." 0 0 24 29 1 #"\n" 0 0 17 3 65 #"; (But a 'Kris' on the mother's side and a 'Kris' on the father's" 0 0 24 29 1 #"\n" 0 0 17 3 18 #"; doesn't count.)" 0 0 24 29 1 #"\n" 0 0 24 29 1 #"\n" 0 0 24 29 1 #"\n" 0 0 24 29 1 #"\n" 0 0 24 29 1 #"\n" 0 0 24 29 1 #"\n" 0 0 17 3 2 #"#|" 0 0 17 29 1 #"\n" 0 0 17 3 71 ( #"/** How would we write this same data structure (and programs) in Ja" #"va?" ) 0 0 17 29 1 #"\n" 0 0 17 3 2 #" *" 0 0 17 29 1 #"\n" 0 0 17 3 17 #" * Many standard " 0 0 17 3 46 #"texts use a single class Child; they represent" 0 0 17 29 1 #"\n" 0 0 17 3 69 ( #" * Unkowns with `null`, and they don't use the name `AncTree` becaus" #"e" ) 0 0 17 29 1 #"\n" 0 0 17 3 35 #" * they just thing \"Child-or-null\"." 0 0 17 29 1 #"\n" 0 0 17 3 2 #" *" 0 0 17 29 1 #"\n" 0 0 17 3 29 #" * This has several problems:" 0 0 17 29 1 #"\n" 0 0 17 3 48 #" * - you can't call methods on your empty-data." 0 0 17 29 1 #"\n" 0 0 17 3 21 #" * - It's easy to be" 0 0 17 3 48 #" unclear about what parameters/fields/local-vars" 0 0 17 29 1 #"\n" 0 0 17 3 68 #" * are AncTrees and which are Childs -- because they're both just" 0 0 17 29 1 #"\n" 0 0 17 3 66 #" * being declared as type Child. (Using annotations `@nonnull`" 0 0 17 29 1 #"\n" 0 0 17 3 46 #" * and `@nullable` help ease this concern.)" 0 0 17 29 1 #"\n" 0 0 17 3 66 #" * - you have lots of checks for `null`, and code for empty-trees" 0 0 17 29 1 #"\n" 0 0 17 3 51 #" * and non-empty trees is all inside class Child" 0 0 17 29 1 #"\n" 0 0 17 3 35 #" * ... Moral: If you're checking" 0 0 17 29 1 #"\n" 0 0 17 3 66 #" * for null or using `instanceof`, you're not really being O.O." 0 0 17 29 1 #"\n" 0 0 17 3 2 #" *" 0 0 17 29 1 #"\n" 0 0 17 3 55 #" * THE SOLUTION: \"the composite pattern\" is how to impl" 0 0 17 3 5 #"ement" 0 0 17 29 1 #"\n" 0 0 17 3 68 #" * union-types in O.O. We'll have `Unknown`, `Child`, and `AncTree`" 0 0 17 29 1 #"\n" 0 0 17 3 70 ( #" * all be actual Java classes (just like we wrote in racket-comments" #")." ) 0 0 17 29 1 #"\n" 0 0 17 3 72 ( #" * We'll have Unknown and Child each extend AncTree (to capture \"is" #" a\");" ) 0 0 17 29 1 #"\n" 0 0 17 3 37 #" * we'll make AncTree abstract (to ca" 0 0 17 3 46 #"pture \"...is exactly one of these sub-types\")." 0 0 17 29 1 #"\n" 0 0 17 3 3 #" */" 0 0 17 29 1 #"\n" 0 0 17 29 1 #"\n" 0 0 17 29 1 #"\n" 0 0 17 29 1 #"\n" 0 0 17 3 26 #"abstract class AncTree { }" 0 0 17 29 1 #"\n" 0 0 17 29 1 #"\n" 0 0 17 29 1 #"\n" 0 0 17 3 33 #"class Unknown extends AncTree { }" 0 0 17 29 1 #"\n" 0 0 17 29 1 #"\n" 0 0 17 29 1 #"\n" 0 0 17 3 31 #"class Child extends AncTree {" 0 0 17 29 1 #"\n" 0 0 17 3 14 #" String name;" 0 0 17 29 1 #"\n" 0 0 17 3 35 #" int yob; // year-of-birth" 0 0 17 29 1 #"\n" 0 0 17 3 45 #" String eye; // eye-color, e.g. \"brown\"" 0 0 17 29 1 #"\n" 0 0 17 3 8 #" AncTre" 0 0 17 3 28 #"e ma, pa; // mother, father" 0 0 17 29 1 #"\n" 0 0 17 29 1 #"\n" 0 0 17 3 29 #" /** standard constructor */" 0 0 17 29 1 #"\n" 0 0 17 3 81 ( #" public Child( String _name, int _yob, String _eye, AncTree _ma, An" #"cTree _pa ) {" ) 0 0 17 29 1 #"\n" 0 0 17 3 22 #" this.name = _name;" 0 0 17 29 1 #"\n" 0 0 17 3 21 #" this.yob = _yob;" 0 0 17 29 1 #"\n" 0 0 17 3 21 #" this.eye = _eye;" 0 0 17 29 1 #"\n" 0 0 17 3 20 #" this.ma = _ma;" 0 0 17 29 1 #"\n" 0 0 17 3 20 #" this.pa = _pa;" 0 0 17 29 1 #"\n" 0 0 17 3 5 #" }" 0 0 17 29 1 #"\n" 0 0 17 29 1 #"\n" 0 0 17 3 44 #" public static void main( String[] args ) {" 0 0 17 29 1 #"\n" 0 0 17 3 86 ( #" AncTree abe = new Child( \"Abe\", 1920, \"brown\", new Unkno" #"wn(), new Unknown() );" ) 0 0 17 29 1 #"\n" 0 0 17 3 86 ( #" AncTree mona = new Child( \"Mona\", 1929, \"blue\", new Unkno" #"wn(), new Unknown() );" ) 0 0 17 29 1 #"\n" 0 0 17 3 35 #" AncTree homer = new Child( \"Hom" 0 0 17 3 32 #"er\", 1951, \"brown\", mona, abe );" 0 0 17 29 1 #"\n" 0 0 17 29 1 #"\n" 0 0 17 29 1 #"\n" 0 0 17 3 54 #" System.out.println( \"Actual: \" + abe.toString() );" 0 0 17 29 1 #"\n" 0 0 17 3 109 ( #" System.out.println( \"Expect: \" + \"new Child( \\\"Abe\\\", 192" #"0, \\\"brown\\\", new Unknown(), new Unknown() )\" );" ) 0 0 17 29 1 #"\n" 0 0 17 29 1 #"\n" 0 0 17 3 55 #" System.out.println( \"Actual: \" + homer.toString() )" 0 0 17 3 1 #";" 0 0 17 29 1 #"\n" 0 0 17 3 45 #" System.out.println( \"Expect: \" + \"??\" ); " 0 0 17 29 1 #"\n" 0 0 17 3 5 #" }" 0 0 17 29 1 #"\n" 0 0 17 29 1 #"\n" 0 0 17 3 18 #" /** @Override */" 0 0 17 29 1 #"\n" 0 0 17 3 46 #" public String toString( /* Child this */ ) {" 0 0 17 29 1 #"\n" 0 0 17 3 22 #" return \"new Child\"" 0 0 17 29 1 #"\n" 0 0 17 3 50 #" + \"( \" + \"\\\"\" + this.name.toString() \"\\\"\"" 0 0 17 29 1 #"\n" 0 0 17 3 26 #" + \", \" + this.yob" 0 0 17 29 1 #"\n" 0 0 17 3 34 #" + \", \" + \"\\\"\" + this.eye." 0 0 17 3 17 #"toString() + \"\\\"\"" 0 0 17 29 1 #"\n" 0 0 17 3 36 #" + \", \" + this.ma.toString()" 0 0 17 29 1 #"\n" 0 0 17 3 36 #" + \", \" + this.pa.toString()" 0 0 17 29 1 #"\n" 0 0 17 3 16 #" + \" )\";" 0 0 17 29 1 #"\n" 0 0 17 3 5 #" }" 0 0 17 29 1 #"\n" 0 0 17 29 1 #"\n" 0 0 17 3 3 #" }" 0 0 17 29 1 #"\n" 0 0 17 3 2 #"|#" 0 0 24 29 1 #"\n" 0 0 24 29 1 #"\n" 0 0 24 29 1 #"\n" 0 0 17 3 18 #"; anctree->string:" 0 0 24 29 1 #"\n" 0 0 17 3 49 #";(check-expect (anctree->string abe) \"[? Abe ?]\")" 0 0 24 29 1 #"\n" 0 0 17 3 63 #";(check-expect (anctree->string abe) \"new Child(Abe,\")" 0 0 24 29 1 #"\n" 0 0 17 3 63 #";(check-expect (anctree->string abe) \"new Child(Abe,\")" 0 0 24 29 1 #"\n" 0 0 24 29 1 #"\n" 0 0 17 3 60 #"; Mon: Define anc-tree. examples; template; size; all-names" 0 0 24 29 1 #"\n" 0 0 17 3 1 #";" 0 0 24 29 1 #"\n" 0 0 17 3 7 #"; Wed: " 0 0 24 29 1 #"\n" 0 0 17 3 45 #"; q: more examples of using map (w/ lambda)" 0 0 24 29 1 #"\n" 0 0 17 3 43 #"; qz: what is the data-def'n of a FamTree" 0 0 24 29 1 #"\n" 0 0 17 3 23 #"; self-quiz: toString" 0 0 24 29 1 #"\n" 0 0 17 3 33 #"; start Java version of famTree" 0 0 24 29 1 #"\n" 0 0 17 3 1 #";" 0 0 24 29 1 #"\n" 0 0 17 3 6 #"; Fri:" 0 0 24 29 1 #"\n" 0 0 17 3 61 #"; Write: change-all-names (add a \"Mr\" or \"Ms\" to each name)" 0 0 24 29 1 #"\n" 0 0 17 3 1 #";" 0 0 24 29 1 #"\n" 0 0 17 3 22 #"; Java: write `size`" 0 0 24 29 1 #"\n" 0 0 17 3 69 ( #"; Note: the analog to `cond` is handled by the OO, which is good" #"." ) 0 0 24 29 1 #"\n" 0 0 17 3 85 ( #"; If you're ever using 'instanceof' or using 'if ...== null', it" #"'s not really OO." ) 0 0 24 29 1 #"\n" 0 0 17 3 26 #"; Java: write `allNames`" 0 0 24 29 1 #"\n" 0 0 17 3 40 #"; term: \"composite design pattern\"" 0 0 24 29 1 #"\n" 0 0 17 3 32 #"; Java: write change-all-names" 0 0 24 29 1 #"\n" 0 0 17 3 1 #";" 0 0 24 29 1 #"\n" 0 0 17 3 62 #"; Writing `equals` (in racket, then in Java) is interesting," 0 0 24 29 1 #"\n" 0 0 24 29 1 #"\n" 0 0 24 29 1 #"\n" 0 0