Thursday, May 9, 2013

The Self-hosting Compiler

("my-flatten") "tree"
comment: "tree" is not a pair -> flattens "tree"
("not") ("pair?") "tree"
"tree"

("my-flatten") "tree"
comment: first element of "tree" is the empty list -> flattens "tree"
("null?") ("car") "tree"
("my-flatten") ("cdr") "tree"

("my-flatten") "tree"
comment: first element of "tree" is a pair -> flattens "tree"
("pair?") ("car") "tree"
("append") ("my-flatten") ("car") "tree"
           ("my-flatten") ("cdr") "tree"

("my-flatten") "tree"
comment: first element of "tree" is not a pair -> flattens "tree"
(always)
("cons") ("car") "tree" ("my-flatten") ("cdr") "tree"

("remove-leading") "number" "list"
comment: empty "list" -> removes "number" elements from the head of "list"
("null?") "list"
nil

("remove-leading") "number" "list"
comment: "number" is zero -> removes "number" elements from the head of "list"
("=") "number" 0
"list"

("remove-leading") "number" "list"
comment: number is positive -> removes "number" elements from the head of "list"
(">") "number" 0
("remove-leading") ("-") "number" 1
                   ("cdr") "list"

("ZEDefy") "string"
comment: takes "string" -> prepends ""ZED"" and returns a symbol
(always)
("string->symbol")
  ("list->string")
    ("append")
      (wrap3) #Z #E #D
      ("my-flatten")
        ("map") "symbol-character"
                ("string->list") "string"

("symbol-character") "character"
comment: "character" is #[ -> returns characters for constructing an identifier
(=) "character" #[
(wrap2) #@ #1

("symbol-character") "character"
comment: "character" is #] -> returns characters for constructing an identifier
(=) "character" #]
(wrap2) #@ #2

("symbol-character") "character"
comment: "character" is #{ -> returns characters for constructing an identifier
(=) "character" #{
(wrap2) #@ #3

("symbol-character") "character"
comment: "character" is #} -> returns characters for constructing an identifier
(=) "character" #}
(wrap2) #@ #4

("symbol-character") "character"
comment: "character" is #' -> returns characters for constructing an identifier
(=) "character" #'
(wrap2) #@ #q

("symbol-character") "character"
comment: "character" is #` -> returns characters for constructing an identifier
(=) "character" #`
(wrap2) #@ #Q

("symbol-character") "character"
comment: "character" is #, -> returns characters for constructing an identifier
(=) "character" #,
(wrap2) #@ #c

("symbol-character") "character"
comment: "character" is #; -> returns characters for constructing an identifier
(=) "character" #;
(wrap2) #@ #s

("symbol-character") "character"
comment: "character" is #\ -> returns characters for constructing an identifier
(=) "character" #\
(wrap2) #@ #b

("symbol-character") "character"
comment: "character" does not have a graphical representation -> returns characters for constructing an identifier
("not") ("char-graphic?") "character"
(wrap2) #@ #w

("symbol-character") "character"
comment: "character" has a graphical representation -> returns characters for constructing an identifier
("char-graphic?") "character"
"character"

("clause-name") "clause"
comment: abs (number) ((=) number 0) (0)
(always)
("car") "clause"

("clause-arguments") "clause"
comment: abs (number) ((=) number 0) (0)
(always)
("cadr") "clause"

("clause-arity") "clause"
comment: abs (number) ((=) number 0) (0)
(always)
("length") ("clause-arguments") "clause"

("clause-body") "clause"
comment: abs (number) ((=) number 0) (0)
(always)
("cddr") "clause"

("clause-name-agree") "clause1" "clause2"
comment: takes two clauses -> returns the common clause name or signals err
("eq?") ("clause-name") "clause1"
        ("clause-name") "clause2"
("clause-name") "clause1"

("clause-arguments-agree") "clause1" "clause2"
comment: takes two clauses -> returns the common clause arguments or signals err
("equal?") ("clause-arguments") "clause1"
           ("clause-arguments") "clause2"
("clause-arguments") "clause1"

("combine-clauses") "clause1" "clause2"
comment: takes two clauses -> combines them
(always)
("cons") ("clause-name-agree") "clause1" "clause2"
         ("cons") ("clause-arguments-agree") "clause1" "clause2"
                  ("append") ("clause-body") "clause1"
                             ("clause-body") "clause2"

("combine-head-clauses") "program"
comment: "program" is a list of clauses -> combines the first two
(always)
("cons") ("combine-clauses") ("car") "program" ("cadr") "program"
         ("cddr") "program"

("ready-clause") "clause"
comment: ((abs) number) ((=) number 0) (0)
(always)
("cons") ("caaar") "clause"
         ("cons") ("cdar") "clause"
                  ("cdr") "clause"

("ready-program") "program"
comment: "program" is a list of clauses -> readies the program
(always)
("map") "ready-clause" "program"

("combine-all") "program"
comment: empty "program" -> returns the fully combined program
("null?") "program"
nil

("combine-all") "program"
comment: one clause "program" -> returns the fully combined program
("null?") ("cdr") "program"
"program"

("combine-all") "program"
comment: head clause names in "program" agree -> returns the fully combined program
(=) ("clause-name") ("car") "program"
    ("clause-name") ("cadr") "program"
("combine-all") ("combine-head-clauses") "program"

("combine-all") "program"
comment: head clause names in "program" do not agree -> returns the fully combined program
("not") (=) ("clause-name") ("car") "program"
            ("clause-name") ("cadr") "program"
("cons") ("car") "program"
         ("combine-all") ("cdr") "program"

("combine-program-clauses") "program"
comment: "program" is a list of clauses -> returns the fully combined program after readying the clauses
(always)
("combine-all") ("ready-program") "program"

("arity-hash") "program"
comment: "program" is a list of combined clauses -> returns a symbol-arity hash table
(always)
("make-hasheq") ("append") ("map") "arity-hash1" "program"
                ("append") (wrap12)
                  ("cons") "'ZEDfi" 2
                  ("cons") "'ZEDlet*" 2
                  ("cons") "'ZEDrd" 3
                  ("cons") "'ZEDgrr" 2
                  ("cons") "'ZEDgr" 2
                  ("cons") "'ZEDdrr" 1
                  ("cons") "'ZEDZEDdr" 1
                  ("cons") "'ZEDdr" 1
                  ("cons") "'ZEDpr" 1
                  ("cons") "'ZEDZEDpr" 1
                  ("cons") "'ZEDfirst" 2
                  ("cons") "'ZEDmp" 2
                ("append") (wrap5)
                  ("cons") "'ZEDdefault-output-port" 0
                  ("cons") "'ZEDzed->racket" 1
                  ("cons") "'if" 3
                  ("cons") "'ZEDcall-with-output-string" 1
                  ("cons") "'ZEDcurry" 1
                ("append") (wrap16)
                  ("cons") "'and" 2
                  ("cons") "'append" 2
                  ("cons") "'assoc" 2
                  ("cons") "'begin" 2
                  ("cons") "'boolean?" 1
                  ("cons") "'caaar" 1
                  ("cons") "'cadr" 1
                  ("cons") "'caddr" 1
                  ("cons") "'cadddr" 1
                  ("cons") "'car" 1
                  ("cons") "'cdar" 1
                  ("cons") "'cddddr" 1
                  ("cons") "'cddr" 1
                  ("cons") "'cdr" 1
                  ("cons") "'char?" 1
                  ("cons") "'char-numeric?" 1
                ("append") (wrap16)
                  ("cons") "'char-graphic?" 1
                  ("cons") "'close-input-port" 1
                  ("cons") "'close-output-port" 1
                  ("cons") "'cons" 2
                  ("cons") "'define" 2
                  ("cons") "'delete-file" 1
                  ("cons") "'display" 2
                  ("cons") "'eq?" 2
                  ("cons") "'equal?" 2
                  ("cons") "'eof-object?" 1
                  ("cons") "'exact?" 1
                  ("cons") "'file-exists?" 1
                  ("cons") "'inexact?" 1
                  ("cons") "'length" 1
                  ("cons") "'list->string" 1
                  ("cons") "'map" 2
                ("append") (wrap16)
                  ("cons") "'not" 1
                  ("cons") "'null?" 1
                  ("cons") "'number?" 1
                  ("cons") "'newline" 1
                  ("cons") "'number->string" 1
                  ("cons") "'or" 2
                  ("cons") "'open-input-file" 1
                  ("cons") "'open-output-file" 1
                  ("cons") "'pair?" 1
                  ("cons") "'quote" 1
                  ("cons") "'reverse" 1
                  ("cons") "'read-char" 1
                  ("cons") "'symbol?" 1
                  ("cons") "'string?" 1
                  ("cons") "'string-append" 2
                  ("cons") "'string->symbol" 1
                ("append") (wrap16)
                  ("cons") "'symbol->string" 1
                  ("cons") "'string->list" 1
                  ("cons") "'string->number" 1
                  ("cons") "'=" 2
                  ("cons") "'<" 2
                  ("cons") "'>" 2
                  ("cons") "'-" 2
                  ("cons") "'+" 2
                  ("cons") "'*" 2
                  ("cons") "'/" 2
                  ("cons") "'ZED1" 1
                  ("cons") "'ZED!" 1
                  ("cons") "'ZEDc" 2
                  ("cons") "'ZED001" 1
                  ("cons") "'ZED002" 2
                  ("cons") "'ZED003" 3
                ("append") (wrap16)
                  ("cons") "'ZED004" 4
                  ("cons") "'ZED005" 5
                  ("cons") "'ZED006" 6
                  ("cons") "'ZED007" 7
                  ("cons") "'ZED008" 8
                  ("cons") "'ZED009" 9
                  ("cons") "'ZED010" 10
                  ("cons") "'force" 1
                  ("cons") "'ZED=" 2
                  ("cons") "'caar" 1
                  ("cons") "'cdddr" 1
                  ("cons") "'list" 0
                  ("cons") "'ZEDalways" 0
                  ("cons") "'apply" 2
                  ("cons") "'ZEDse" 2
                  ("cons") "'ZEDand" 2
                ("append") (wrap16)
                  ("cons") "'ZEDor" 2
                  ("cons") "'ZED011" 11
                  ("cons") "'ZED012" 12
                  ("cons") "'ZED013" 13
                  ("cons") "'ZED014" 14
                  ("cons") "'ZED015" 15
                  ("cons") "'ZED016" 16
                  ("cons") "'ZED017" 17
                  ("cons") "'ZED018" 18
                  ("cons") "'ZED019" 19
                  ("cons") "'ZED020" 20
                  ("cons") "'ZED021" 21
                  ("cons") "'ZED022" 22
                  ("cons") "'ZED023" 23
                  ("cons") "'ZED024" 24
                  ("cons") "'ZED025" 25
                ("append") (wrap16)
                  ("cons") "'ZED026" 26
                  ("cons") "'ZED027" 27
                  ("cons") "'ZED028" 28
                  ("cons") "'ZED029" 29
                  ("cons") "'ZED030" 30
                  ("cons") "'ZED031" 31
                  ("cons") "'ZED032" 32
                  ("cons") "'get-file" 0
                  ("cons") "'make-hasheq" 1
                  ("cons") "'hash-ref" 2
                  ("cons") "'apply1" 4
                  ("cons") "'apply2" 6
                  ("cons") "'apply3" 8
                  ("cons") "'apply4" 10
                  ("cons") "'apply5" 12
                  ("cons") "'filter" 2
                ("append") (wrap16)
                  ("cons") "'foldr" 3
                  ("cons") "'function-hack-2" 2
                  ("cons") "'write-char" 2
                  ("cons") "'ZED033" 33
                  ("cons") "'ZED034" 34
                  ("cons") "'ZED035" 35
                  ("cons") "'ZED036" 36
                  ("cons") "'ZED037" 37
                  ("cons") "'ZED038" 38
                  ("cons") "'ZED039" 39
                  ("cons") "'ZED040" 40
                  ("cons") "'ZED041" 41
                  ("cons") "'ZED042" 42
                  ("cons") "'ZED043" 43
                  ("cons") "'ZED044" 44
                  ("cons") "'ZED045" 45
                ("append") (wrap16)
                  ("cons") "'ZED046" 46
                  ("cons") "'ZED047" 47
                  ("cons") "'ZED048" 48
                  ("cons") "'ZED049" 49
                  ("cons") "'ZED050" 50
                  ("cons") "'ZED051" 51
                  ("cons") "'ZED052" 52
                  ("cons") "'ZED053" 53
                  ("cons") "'ZED054" 54
                  ("cons") "'ZED055" 55
                  ("cons") "'ZED056" 56
                  ("cons") "'ZED057" 57
                  ("cons") "'ZED058" 58
                  ("cons") "'ZED059" 59
                  ("cons") "'ZED060" 60
                  ("cons") "'ZED061" 61
                ("append") (wrap16)
                  ("cons") "'ZED062" 62
                  ("cons") "'ZED063" 63
                  ("cons") "'ZED064" 64
                  ("cons") "'ZED065" 65
                  ("cons") "'ZED066" 66
                  ("cons") "'ZED067" 67
                  ("cons") "'ZED068" 68
                  ("cons") "'ZED069" 69
                  ("cons") "'ZED070" 70
                  ("cons") "'ZED071" 71
                  ("cons") "'ZED072" 72
                  ("cons") "'ZED073" 73
                  ("cons") "'ZED074" 74
                  ("cons") "'ZED075" 75
                  ("cons") "'ZED076" 76
                  ("cons") "'ZED077" 77
                ("append") (wrap16)
                  ("cons") "'ZED078" 78
                  ("cons") "'ZED079" 79
                  ("cons") "'ZED080" 80
                  ("cons") "'ZED081" 81
                  ("cons") "'ZED082" 82
                  ("cons") "'ZED083" 83
                  ("cons") "'ZED084" 84
                  ("cons") "'ZED085" 85
                  ("cons") "'ZED086" 86
                  ("cons") "'ZED087" 87
                  ("cons") "'ZED088" 88
                  ("cons") "'ZED089" 89
                  ("cons") "'ZED090" 90
                  ("cons") "'ZED091" 91
                  ("cons") "'ZED092" 92
                  ("cons") "'ZED093" 93
                ("append") (wrap16)
                  ("cons") "'ZEDwrap" 1
                  ("cons") "'ZEDwrap2" 2
                  ("cons") "'ZEDwrap3" 3
                  ("cons") "'ZEDwrap4" 4
                  ("cons") "'ZEDwrap5" 5
                  ("cons") "'ZEDwrap6" 6
                  ("cons") "'ZEDwrap7" 7
                  ("cons") "'ZEDwrap8" 8
                  ("cons") "'ZEDwrap9" 9
                  ("cons") "'ZEDwrap10" 10
                  ("cons") "'ZEDwrap11" 11
                  ("cons") "'ZEDwrap12" 12
                  ("cons") "'ZEDwrap13" 13
                  ("cons") "'ZEDwrap14" 14
                  ("cons") "'ZEDwrap15" 15
                  ("cons") "'ZEDwrap16" 16
                (wrap7)
                  ("cons") "'ZED094" 94
                  ("cons") "'ZED095" 95
                  ("cons") "'ZED096" 96
                  ("cons") "'ZED097" 97
                  ("cons") "'ZED098" 98
                  ("cons") "'ZED099" 99
                  ("cons") "'ZEDquote" 1
               
("arity-hash1") "clause"
comment: abs (number) ((=) number 0) (0)
(always)
("cons") ("clause-name") "clause"
         ("clause-arity") "clause"
       
("arity") "arity-hash" "function"
comment: takes a hash-table and a symbol -> returns the arity of the named function
(always)
("hash-ref") "arity-hash" "function"

("primitives")
comment: makes a begin with definitions for the primitives
(always)
("append") (wrap) "'begin"
           ("append") (wrap12)
             ("quote") ("define") (003) "ZEDfi" "function" "list"
                                  ("if") ("null?") "list"
                                         nil
                                         ("if") (002) "function" (1) "list"
                                                (c) (1) "list" (003) "ZEDfi" "function" (!) "list"
                                                (003) "ZEDfi" "function" (!) "list"
             (wrap3)
                "'define-syntax"
                "'ZEDlet*"
                (wrap3)
                  "'syntax-rules"
                  nil
                  (wrap2)
                    (wrap3) "'_" "'a" "'b"
                    (wrap3) "'let*" "'a" "'b"
             ("quote") ("define") (004) "ZEDrd" "final" "function" "list"
                                  (004) "foldr" "function" "final" (zed->racket) "list"
             ("quote") ("define") (003) "ZEDgrr" "garbage" "value"
                                  ("begin") (drr) "garbage" "value"
             ("quote") ("define") (003) "ZEDgr" "garbage" "value"
                                  ("begin") (dr) "garbage" "value"
             ("quote") ("define") (002) "ZEDdrr" "value"
                                  ("begin") ("display") (pr) "value" (default-output-port)
                                  ("begin") ("newline") (default-output-port)
                                  ("begin") ("newline") (default-output-port)
                                  "value"
             ("quote") ("define") (002) "ZEDZEDdr" "value"
                                  ("if") ("pair?") "value"
                                         (mp) "ZEDZEDdr" (first) 64 "value"
                                         "value"
             ("quote") ("define") (002) "ZEDdr" "value"
                                  ("begin") ("display") (pr) (ZEDdr) "value" (default-output-port)
                                  ("begin") ("newline") (default-output-port)
                                  ("begin") ("newline") (default-output-port)
                                  "value"
             ("quote") ("define") (002) "ZEDpr" "value"
                                  (call-with-output-string) (002) (curry) "display" (ZEDpr) "value"
             ("quote") ("define") (002) "ZEDZEDpr" "value"
                                  ("if") ("char?") "value"
                                         ("string-append") ""\"#\""" ("list->string") (wrap) "value"
                                         ("if") ("string?") "value"
                                                ("string-append") ""\"\\\"\""" ("string-append") "value" ""\"\\\"\"""
                                                ("if") ("not") ("pair?") "value"
                                                       "value"
                                                       ("cons") ("ZEDZEDpr") (1) "value" ("ZEDZEDpr") (!) "value"
             ("quote") ("define") (003) "ZEDfirst" "integer" "list"
                                  ("if") ("not") ("pair?") "list"
                                         "list"
                                         ("if") ("=") "integer" 0
                                                nil
                                                (c) (1) "list"
                                                    ("ZEDfirst") ("-") "integer" 1
                                                                 (!) "list"
             ("quote") ("define") (003) "ZEDmp" "function" "list"
                                  ("if") ("null?") "list"
                                         nil
                                         ("if") ("pair?") "list"
                                                (c) (002) "function" (1) "list"
                                                    ("ZEDmp") "function" (!) "list"
                                                (002) "function" "list"
           ("append") (wrap3)
             ("quote") ("define") "ZEDdefault-output-port" "current-output-port"
             ("quote") ("define") (002) "ZEDzed->racket" "value"
                                  ("if") ("not") ("pair?") "value"
                                         "value"
                                         ("cons") ("ZEDzed->racket") (1) "value" ("ZEDzed->racket") (!) "value"                                        
             ("quote") ("define") "ZEDcall-with-output-string" "call-with-output-string"
           ("append") (wrap16)
             ("quote") ("define") "ZEDcurry" "curry"
             ("quote") ("define") "ZEDwrap" "list"
             ("quote") ("define") "ZEDwrap2" "list"
             ("quote") ("define") "ZEDwrap3" "list"
             ("quote") ("define") "ZEDwrap4" "list"
             ("quote") ("define") "ZEDwrap5" "list"
             ("quote") ("define") "ZEDwrap6" "list"
             ("quote") ("define") "ZEDwrap7" "list"
             ("quote") ("define") "ZEDwrap8" "list"
             ("quote") ("define") "ZEDwrap9" "list"
             ("quote") ("define") "ZEDwrap10" "list"
             ("quote") ("define") "ZEDwrap11" "list"
             ("quote") ("define") "ZEDwrap12" "list"
             ("quote") ("define") "ZEDwrap13" "list"
             ("quote") ("define") "ZEDwrap14" "list"
             ("quote") ("define") "ZEDwrap15" "list"
           ("append") (wrap16)
             ("quote") ("define") "ZEDwrap16" "list"
             (wrap3)
                "'define-syntax"
                "'ZEDand"
                (wrap3)
                  "'syntax-rules"
                  nil
                  (wrap2)
                    (wrap3) "'_" "'a" "'b"
                    (wrap3) "'and" "'a" "'b"
             (wrap3)
                "'define-syntax"
                "'ZEDor"
                (wrap3)
                  "'syntax-rules"
                  nil
                  (wrap2)
                    (wrap3) "'_" "'a" "'b"
                    (wrap3) "'or" "'a" "'b"
             (wrap3)
                "'define-syntax"
                "'ZEDse"
                (wrap3)
                  "'syntax-rules"
                  nil
                  (wrap2)
                    (wrap3) "'_" "'a" "'b"
                    (wrap3) "'begin" "'a" "'b"
             (wrap3)
                "'define-syntax"
                "'ZEDc"
                (wrap3)
                  "'syntax-rules"
                  nil
                  (wrap2)
                    (wrap3) "'_" "'a" "'b"
                    (wrap3) "'cons"
                            (wrap2) "'delay" "'a"
                            (wrap2) "'delay" "'b"
             ("quote")
               ("define")
                 ("ZED1") "pair" ("force") ("car") "pair"
             ("quote")
               ("define")
                 ("ZED!") "pair" ("force") ("cdr") "pair"
             ("quote") ("define") "ZED=" "eqv?"
             ("quote") ("define") "ZEDerr" "'err"
             (wrap3)
               "'define"
               "'ZEDnil"
               (wrap2)
                 "'quote"
                 nil
             ("quote") ("define") ("ZEDalways") "#true"
             (wrap3)
                "'define-syntax"
                "'apply1"
                (wrap3)
                  "'syntax-rules"
                  nil
                  (wrap2)
                    (wrap5) "'_" "'a" "'b" "'c" "'d"
                    (wrap5) "'apply" "'a" "'b" "'c" "'d"
             (wrap3)
                "'define-syntax"
                "'apply2"
                (wrap3)
                  "'syntax-rules"
                  nil
                  (wrap2)
                    (wrap7) "'_" "'a" "'b" "'c" "'d" "'e" "'f"
                    (wrap7) "'apply" "'a" "'b" "'c" "'d" "'e" "'f"
             (wrap3)
                "'define-syntax"
                "'apply3"
                (wrap3)
                  "'syntax-rules"
                  nil
                  (wrap2)
                    (wrap9) "'_" "'a" "'b" "'c" "'d" "'e" "'f" "'g" "'h"
                    (wrap9) "'apply" "'a" "'b" "'c" "'d" "'e" "'f" "'g" "'h"
             (wrap3)
                "'define-syntax"
                "'apply4"
                (wrap3)
                  "'syntax-rules"
                  nil
                  (wrap2)
                    (wrap11) "'_" "'a" "'b" "'c" "'d" "'e" "'f" "'g" "'h" "'i" "'j"
                    (wrap11) "'apply" "'a" "'b" "'c" "'d" "'e" "'f" "'g" "'h" "'i" "'j"
             (wrap3)
                "'define-syntax"
                "'apply5"
                (wrap3)
                  "'syntax-rules"
                  nil
                  (wrap2)
                    (wrap13) "'_" "'a" "'b" "'c" "'d" "'e" "'f" "'g" "'h" "'i" "'j" "'k" "'l"
                    (wrap13) "'apply" "'a" "'b" "'c" "'d" "'e" "'f" "'g" "'h" "'i" "'j" "'k" "'l"
           (wrap)
             (wrap3)
                "'define-syntax"
                "'ZEDquote"
                (wrap3)
                  "'syntax-rules"
                  nil
                  (wrap2)
                    (wrap2) "'_" "'a"
                    (wrap2) "'quote" "'a"

("application?") "expression"
comment: (+) 1 2
(always)
("and") ("not") ("null?") "expression"
        ("pair?") ("car") "expression"

("function") "expression"
comment: (+) 1 2
(always)
("caar") "expression"

("double-application?") "expression"
comment: empty "expression" -> is the expression a double application?
("null?") "expression"
"#false"

("double-application?") "expression"
comment: "expression" just has one element -> is the expression a double application?
("null?") ("cdr") "expression"
"#false"

("double-application?") "expression"
comment: "expression" has at least two elements -> is the expression a double application?
(always)
("and") ("pair?") ("car") "expression"
        ("pair?") ("cadr") "expression"
       
("schemefy") "expression" "arity-hash"
comment: takes a ZED expresssion and the arity hash-table -> returns a Scheme expression
(always)
(wrap) ("schemefy1") "expression" "arity-hash"

("schemefy1") "expression" "arity-hash"
comment: (1 2 3) ((+ . 2) (square . 1) (current-directory . 0))
("not") ("application?") "expression"
("car") "expression"

("schemefy1") "expression" "arity-hash"
comment: ((current-directory) (square) 1) ((+ . 2) (square . 1) (current-directory . 0))
(=) 0 ("arity") "arity-hash" ("function") "expression"
("car") "expression"

("schemefy1") "expression" "arity-hash"
comment: ((+) (+) 1 2 3) ((+ . 2) (square . 1) (current-directory . 0))
("double-application?") "expression"
("schemefy2") "expression" "arity-hash" ("schemefy1") ("cdr") "expression" "arity-hash"

("schemefy1") "expression" "arity-hash"
comment: ((+) 1 2 3) ((+ . 2) (square . 1) (current-directory . 0))
("application?") "expression"
("cons") ("function") "expression"
         ("gather") ("arity")
                      "arity-hash"
                      ("function") "expression"
                    ("cdr") "expression"
                    "arity-hash"

("schemefy2") "expression" "arity-hash" "schemefied"
comment:
(always)
("cons") ("function") "expression"
         ("cons") "schemefied"
                  ("gather")
                    ("-") ("arity")
                            "arity-hash"
                            ("function") "expression"
                          1
                    ("remove-leading")
                      ("+") 1 ("length")
                                ("my-flatten") "schemefied"
                      "expression"
                    "arity-hash"


("gather") "how-many" "expression" "arity-hash"
comment: 0 (3) ((+ . 2) (square . 1) (current-directory . 0))
("=") "how-many" 0
nil

("gather") "how-many" "expression" "arity-hash"
comment: 2 ((+) 1 2 3) ((+ . 2) (square . 1) (current-directory . 0))
("application?") "expression"
("gather1") "how-many" "expression" "arity-hash" ("schemefy") "expression" "arity-hash"

("gather") "how-many" "expression" "arity-hash"
comment: 1 (2 3) ((+ . 2) (square . 1) (current-directory . 0))
("not") ("application?") "expression"
("cons") ("car") "expression"
         ("gather") ("-") "how-many" 1
                    ("cdr") "expression"
                    "arity-hash"

("gather1") "how-many" "expression" "arity-hash" "schemefied"
comment:
(always)
("append") "schemefied"
           ("gather") ("-") "how-many" 1
                      ("remove-leading")
                        ("length")
                          ("my-flatten") "schemefied"
                        "expression"
                      "arity-hash"

("map-with") "function" "list" "extra"
comment: empty "list" -> map over the list with an extra value
("null?") "list"
nil

("map-with") "function" "list" "extra"
comment: non empty "list" -> map over the list with an extra value
("not") ("null?") "list"
("cons") (003) "function" ("car") "list" "extra"
         ("map-with") "function" ("cdr") "list" "extra"

("functionize") "clause" "arity-hash"
comment: takes an already combined "clause" and the "arity-hash" -> produces a scheme function
(always)
(wrap3) "'define"
            ("cons") ("clause-name") "clause" ("clause-arguments") "clause"
            ("cons") "'cond"
                     ("append")
                       ("condefy")
                         ("map-with")
                           "schemefy"
                           ("clause-body") "clause"
                           "arity-hash"
                       (wrap) (wrap2) "'else" "'ZEDerr"

("condefy") "expressions"
comment: empty "expressions" -> constructs the list structure of a cond
("null?") "expressions"
nil

("condefy") "expressions"
comment: ((< number 0)) ((- 0 number)) ((not (< number 0))) (number)
(always)
("cons") ("append") ("car") "expressions"
                    ("cadr") "expressions"
         ("condefy") ("cddr") "expressions"

("programize") "program" "arity-hash"
comment: takes the already combined clauses of "program" -> generates a Scheme program
(always)
("cons") "'begin" ("map-with") "functionize" "program" "arity-hash"

("namefy") "part"
comment: (square)
("pair?") "part"
(wrap) ("symbolize") ("car") "part"

("namefy") "part"
comment: .25
("not") ("pair?") "part"
("flexefy") "part"

("symbolize") "part"
comment: hey
("symbol?") "part"
("ZEDefy") ("symbol->string") "part"

("symbolize") "part"
comment: "hey"
("string?") "part"
("string->symbol") "part"

("flexefy") "part"
comment: hey
("symbol?") "part"
("flexefy1") ("string->list") ("symbol->string") "part"

("flexefy") "part"
comment: "hey"
("string?") "part"
("string->symbol") "part"

("flexefy") "part"
comment: 42
("exact?") "part"
"part"

("flexefy") "part"
comment: .25
("inexact?") "part"
("string->number") ("string-append") ""#e"" ("number->string") "part"

("flexefy1") "list"
comment: ## #0 #1
("and") (=) ## ("car") "list"
        ("and") (=) #0 ("cadr") "list"
                ("not") ("null?") ("cddr") "list"
("string->symbol")
  ("list->string") ("append") (wrap3) ## #\ #u
                              ("cddr") "list"

("flexefy1") "list"
comment: ## #t #r #u #e
(003) "equal?" "list" (wrap5) ## #t #r #u #e
"#true"
           
("flexefy1") "list"
comment: ## #f #a #l #s #e
(003) "equal?" "list" (wrap6) ## #f #a #l #s #e
"#false"
           
("flexefy1") "list"
comment: ## #n #u #l
(=) ("car") "list" ##
("string->symbol") ("list->string") ("append") (wrap2) ## #\
                                               ("cdr") "list"

("flexefy1") "list"
comment: #h #e #y
("not") (=) ("car") "list" ##
("ZEDefy") ("list->string") "list"

("read-all!") "port"
comment: any input port -> reads in all the characters
(always)
("read-all1") "port" ("read-char") "port"

("read-all1") "port" "character"
comment: character is the end of file object -> reads in all the characters
("eof-object?") "character"
("begin") ("close-input-port") "port"
          nil

("read-all1") "port" "character"
comment: not at end of file -> reads in all the characters
("not") ("eof-object?") "character"
("cons") "character" ("read-all!") "port"

("newline-space") "program"
comment: takes a "program" -> repeatedly removes newlines preceding #space or #tab
(always)
("append") ("newline-space-again") "program"
           (wrap) #newline

("newline-space1") "program"
comment: empty "program" -> removes newlines before #space or #tab
("null?") "program"
nil

("newline-space1") "program"
comment: (#Z)
("null?") ("cdr") "program"
"program"

("newline-space1") "program"
comment: #newline #tab #Z #E #D
("and") (=) #newline ("car") "program"
        ("or") (=) #space ("cadr") "program"
               (=) #tab ("cadr") "program"
("newline-space1") ("cdr") "program"

("newline-space1") "program"
comment: #newline #newline #space #Z
(=) #newline ("car") "program"
("cons") #newline ("newline-space1") ("cdr") "program"

("newline-space1") "program"
comment: #Z #newline #newline #space
("not") (=) #newline ("car") "program"
("cons") ("car") "program" ("newline-space1") ("cdr") "program"

("newline-space-again") "program"
comment: takes a "program" -> repeatedly removes newlines preceding #space or #tab
(always)
("newline-space-again1") "program" ("newline-space1") "program"

("newline-space-again1") "program" "transformed-program"
comment: (#Z #space) (#Z #space)
("equal?") "program" "transformed-program"
"program"

("newline-space-again1") "program" "transformed-program"
comment: (#Z #newline #space) '(#Z #space)
(always)
("newline-space-again") "transformed-program"

("newline-space-tab-repeats") "program"
comment: empty "program" -> returns program with no consecutive #newline and no consecutive #tab #space
("null?") "program"
nil

("newline-space-tab-repeats") "program"
comment: (#Z)
("null?") ("cdr") "program"
"program"

("newline-space-tab-repeats") "program"
comment: #newline #newline #newline #Z
("and") (=) #newline ("car") "program"
        (=) #newline ("cadr") "program"
("newline-space-tab-repeats") ("cdr") "program"

("newline-space-tab-repeats") "program"
comment: #tab #space #tab #Z
("and") ("or") (=) #space ("car") "program"
               (=) #tab ("car") "program"
        ("or") (=) #space ("cadr") "program"
               (=) #tab ("cadr") "program"
("newline-space-tab-repeats") ("cdr") "program"

("newline-space-tab-repeats") "program"
comment: #tab #Z
(always)
("cons") ("car") "program" ("newline-space-tab-repeats") ("cdr") "program"

("tab-replace") "program"
comment: empty program -> replaces #tab with #space
("null?") "program"
nil

("tab-replace") "program"
comment: #tab #Z #space
(=) #tab ("car") "program"
("cons") #space ("tab-replace") ("cdr") "program"

("tab-replace") "program"
comment: #Z #tab
(always)
("cons") ("car") "program" ("tab-replace") ("cdr") "program"

("space-newline") "program"
comment: empty "program" -> remove #space before #newline
("null?") "program"
nil

("space-newline") "program"
comment: (#newline)
("null?") ("cdr") "program"
"program"

("space-newline") "program"
comment: #space #newline #Z
("and") (=) #space ("car") "program"
        (=) #newline ("cadr") "program"
("space-newline") ("cdr") "program"

("space-newline") "program"
comment: #newline #Z #space #newline
(always)
("cons") ("car") "program" ("space-newline") ("cdr") "program"

("leading-newlines") "program"
comment: empty "program" -> program without leading newlines
("null?") "program"
nil

("leading-newlines") "program"
comment: #newline #Z
(=) #newline ("car") "program"
("cdr") "program"

("leading-newlines") "program"
comment: #Z #newline #E #newline
(always)
"program"

("sentences") "program"
comment: #o #n #e #space #t #w #o #newline #t #h #r #e #e #newline
(always)
("sentences1") "program" nil

("sentences1") "program" "accumulator"
comment: empty "program" -> returns the program broken up into sentences
("null?") "program"
nil

("sentences1") "program" "accumulator"
comment: (#newline #t #h #r #e #e #newline) (#o #w #t #space #e #n #o)
(=) #newline ("car") "program"
("cons") ("reverse") "accumulator"
         ("sentences1") ("cdr") "program" nil

("sentences1") "program" "accumulator"
comment: (#o #newline #t #h #r #e #e #newline) (#w #t #space #e #n #o)
(always)
("sentences1") ("cdr") "program"
               ("cons") ("car") "program"
                        "accumulator"

("discard-comments") "program"
comment: empty "program" -> throws out the comments
("null?") "program"
nil

("discard-comments") "program"
comment: non empty "program" -> throws out the comments
(always)
("cons") ("car") "program"
         ("cons") ("caddr") "program"
                  ("cons") ("cadddr") "program"
                           ("discard-comments") ("cddddr") "program"

("debug-sentence") "sentence"
comment: takes a "sentence" of characters -> generates a Racket list structure
("null?") "sentence"
nil

("debug-sentence") "sentence"
comment: #space #n #u #m #b #e #r
(=) #space ("car") "sentence"
("debug-sentence") ("cdr") "sentence"

("debug-sentence") "sentence"
comment: #( #a #b #s #) #space #n #u #m #b #e #r
(=) #( ("car") "sentence"
("debug-sentence1") "sentence" ("gather-verb") ("cdr") "sentence"

("debug-sentence") "sentence"
comment: #n #u #m #b #e #r
(always)
("cons") ("namefy") ("noun") ("gather-noun") "sentence"
         ("debug-sentence")
           ("remove-leading")
             ("length")
               ("gather-noun") "sentence"
             "sentence"
           
("debug-sentence1") "sentence" "gather-verb"
comment:
(always)
("debug-sentence2") "sentence" "gather-verb" ("verb") "gather-verb"

("debug-sentence2") "sentence" "gather-verb" "verb"
comment:
("or") (=) "verb" "'c"
       ("or") (=) "verb" "'let*"
       ("or") (=) "verb" "'|001|"
       ("or") (=) "verb" "'|002|"
       ("or") (=) "verb" "'|003|"
       ("or") (=) "verb" "'|004|"
       ("or") (=) "verb" "'|005|"
       ("or") (=) "verb" "'|006|"
       ("or") (=) "verb" "'|007|"
       ("or") (=) "verb" "'|008|"
       ("or") (=) "verb" "'|009|"
       ("or") (=) "verb" "'|010|"
       ("or") (=) "verb" "'|011|"
       ("or") (=) "verb" "'|012|"
       ("or") (=) "verb" "'|013|"
       ("or") (=) "verb" "'|014|"
       ("or") (=) "verb" "'|015|"
       ("or") (=) "verb" "'|016|"
       ("or") (=) "verb" "'|017|"
       ("or") (=) "verb" "'|018|"
       ("or") (=) "verb" "'|019|"
       ("or") (=) "verb" "'|020|"
       ("or") (=) "verb" "'|021|"
       ("or") (=) "verb" "'|022|"
       ("or") (=) "verb" "'|023|"
       ("or") (=) "verb" "'|024|"
       ("or") (=) "verb" "'|025|"
       ("or") (=) "verb" "'|026|"
       ("or") (=) "verb" "'|027|"
       ("or") (=) "verb" "'|028|"
       ("or") (=) "verb" "'|029|"
       ("or") (=) "verb" "'|030|"
       ("or") (=) "verb" "'|031|"
       ("or") (=) "verb" "'|032|"
       ("or") (=) "verb" "'|033|"
       ("or") (=) "verb" "'|034|"
       ("or") (=) "verb" "'|035|"
       ("or") (=) "verb" "'|036|"
       ("or") (=) "verb" "'|037|"
       ("or") (=) "verb" "'|038|"
       ("or") (=) "verb" "'|039|"
       ("or") (=) "verb" "'|040|"
       ("or") (=) "verb" "'|041|"
       ("or") (=) "verb" "'|042|"
       ("or") (=) "verb" "'|043|"
       ("or") (=) "verb" "'|044|"
       ("or") (=) "verb" "'|045|"
       ("or") (=) "verb" "'|046|"
       ("or") (=) "verb" "'|047|"
       ("or") (=) "verb" "'|048|"
       ("or") (=) "verb" "'|049|"
       ("or") (=) "verb" "'|050|"
       ("or") (=) "verb" "'|051|"
       ("or") (=) "verb" "'|052|"
       ("or") (=) "verb" "'|053|"
       ("or") (=) "verb" "'|054|"
       ("or") (=) "verb" "'|055|"
       ("or") (=) "verb" "'|056|"
       ("or") (=) "verb" "'|057|"
       ("or") (=) "verb" "'|058|"
       ("or") (=) "verb" "'|059|"
       ("or") (=) "verb" "'|060|"
       ("or") (=) "verb" "'|061|"
       ("or") (=) "verb" "'|062|"
       ("or") (=) "verb" "'|063|"
       ("or") (=) "verb" "'|064|"
       ("or") (=) "verb" "'|065|"
       ("or") (=) "verb" "'|066|"
       ("or") (=) "verb" "'|067|"
       ("or") (=) "verb" "'|068|"
       ("or") (=) "verb" "'|069|"
       ("or") (=) "verb" "'|070|"
       ("or") (=) "verb" "'|071|"
       ("or") (=) "verb" "'|072|"
       ("or") (=) "verb" "'|073|"
       ("or") (=) "verb" "'|074|"
       ("or") (=) "verb" "'|075|"
       ("or") (=) "verb" "'|076|"
       ("or") (=) "verb" "'|077|"
       ("or") (=) "verb" "'|078|"
       ("or") (=) "verb" "'|079|"
       ("or") (=) "verb" "'|080|"
       ("or") (=) "verb" "'|081|"
       ("or") (=) "verb" "'|082|"
       ("or") (=) "verb" "'|083|"
       ("or") (=) "verb" "'|084|"
       ("or") (=) "verb" "'|085|"
       ("or") (=) "verb" "'|086|"
       ("or") (=) "verb" "'|087|"
       ("or") (=) "verb" "'|088|"
       ("or") (=) "verb" "'|089|"
       ("or") (=) "verb" "'|090|"
       ("or") (=) "verb" "'|091|"
       ("or") (=) "verb" "'|092|"
       ("or") (=) "verb" "'|093|"
       ("or") (=) "verb" "'|094|"
       ("or") (=) "verb" "'|095|"
       ("or") (=) "verb" "'|096|"
       ("or") (=) "verb" "'|097|"
       ("or") (=) "verb" "'|098|"
       (=) "verb" "'|099|"
("cons") (wrap) "'ZEDgrr"
         ("cons") ("string-append") ""\"""
                  ("string-append") ("list->string")
                                      ("foldr") "append"
                                                nil
                                                ("map") "slashefy" "sentence"
                                    ""\"""
         ("cons") ("namefy") (wrap) "verb"
                  ("read-sentence")
                    ("remove-leading") ("+") 2 ("length") "gather-verb"
                                       "sentence"

("debug-sentence2") "sentence" "gather-verb" "verb"
comment:
(always)
("cons") (wrap) "'ZEDdr"
         ("cons") (wrap) "'ZEDgrr"
         ("cons") ("string-append") ""\"""
                  ("string-append") ("list->string")
                                      ("foldr") "append"
                                                nil
                                                ("map") "slashefy" "sentence"
                                    ""\"""
         ("cons") ("namefy") (wrap) "verb"
                  ("debug-sentence")
                    ("remove-leading") ("+") 2 ("length") "gather-verb"
                                       "sentence"

("slashefy") character
comment: character is quotation mark -> replace quotation marks with escaped
(=) #" character
(wrap2) #\ #"

("slashefy") character
comment: character is not quotation mark -> replace quotation marks with escaped
(always)
(wrap) character
   
("read-sentence") "sentence"
comment: takes a "sentence" of characters -> generates a Racket list structure
("null?") "sentence"
nil

("read-sentence") "sentence"
comment: #space #n #u #m #b #e #r
(=) #space ("car") "sentence"
("read-sentence") ("cdr") "sentence"

("read-sentence") "sentence"
comment: #( #a #b #s #) #space #n #u #m #b #e #r
(=) #( ("car") "sentence"
("read-sentence1") "sentence" ("gather-verb") ("cdr") "sentence"

("read-sentence") "sentence"
comment: #n #u #m #b #e #r
(always)
("cons") ("namefy") ("noun") ("gather-noun") "sentence"
         ("read-sentence")
           ("remove-leading")
             ("length")
               ("gather-noun") "sentence"
             "sentence"
           
("read-sentence1") "sentence" "gather-verb"
comment:
(always)
("cons") ("namefy") (wrap) ("verb") "gather-verb"
         ("read-sentence")
           ("remove-leading") ("+") 2 ("length") "gather-verb"
                              "sentence"

("verb") "gather-verb"
comment: #" #q #u #o #t #e #"
("and") ("not") ("null?") ("cdr") "gather-verb"
        ("and") (=) #" ("car") "gather-verb"
                (=) #" ("car") ("reverse") "gather-verb"
("list->string")
  ("cdr") ("reverse") ("cdr") ("reverse") "gather-verb"

("verb") "gather-verb"
comment: #q #u #o #t #e
(always)
("string->symbol") ("list->string") "gather-verb"

("noun") "gather-noun"
comment: #. #5
(always)
("noun-number") (list->string) "gather-noun" ("string->number") (list->string) "gather-noun"

("noun-number") "noun" "number"
comment: ".5" 0.5
(always)
("noun-number1") "noun" "number"

("noun-number1") "noun" "number"
comment: ".5" 0.5
"number"
"number"

("noun-number1") "noun" "number"
comment: ""square"" #false
("and") (=) #" ("car") ("string->list") "noun"
        (=) #" ("car") ("reverse") ("string->list") "noun"
("list->string")
  ("cdr") ("reverse") ("cdr") ("reverse") ("string->list") "noun"

("noun-number1") "noun" "number"
comment: "square" #false
(always)
("string->symbol") "noun"

("debug-sentences") "sentences"
comment: empty "sentences" -> instrument to program
("null?") "sentences"
nil

("debug-sentences") "sentences"
comment: (#( #s #q #u #a #r #e #) #space #x) (#( #a #l #w #a #y #s #)) (#( #" #* #" #) #space #x #space #x)
(always)
("cons") ("read-sentence") ("car") "sentences"
         ("cons") ("debug-sentence") ("cadr") "sentences"
         ("cons") ("debug-sentence") ("caddr") "sentences"
         ("debug-sentences") ("cdddr") "sentences"

("read-sentences") "sentences"
comment: (#( #s #q #u #a #r #e #) #space #x) (#( #a #l #w #a #y #s #)) (#( #" #* #" #) #space #x #space #x)
(always)
("map") "read-sentence" "sentences"

("gather-verb") "sentence"
comment: #) #space #x
(=) #) ("car") "sentence"
nil

("gather-verb") "sentence"
comment: #s #q #u #a #r #e #) #space #x
(always)
("cons") ("car") "sentence"
         ("gather-verb") ("cdr") "sentence"

("gather-noun") "sentence"
comment: nil
("null?") "sentence"
nil

("gather-noun") "sentence"
comment: #space #n #u #m #b #e #r #2
(=) #space ("car") "sentence"
nil

("gather-noun") "sentence"
comment: #n #u #m #b #e #r #1 #space #n #u #m #b #e #r #2
(always)
("cons") ("car") "sentence"
         ("gather-noun") ("cdr") "sentence"

("by-three") "program"
comment: empty "program" -> gathers sentences into groups of three
("null?") "program"
nil

("by-three") "program"
comment: non empty "program" -> gathers sentences into groups of three
(always)
("cons")
  (wrap3)
    ("car") "program"
    ("cadr") "program"
    ("caddr") "program"
  ("by-three") ("cdddr") "program"

("replace-candidate") "candidate"
comment: empty candidate -> get rid of non parentheses part
("null?") "candidate"
nil

("replace-candidate") "candidate"
comment: #( #s #q #u #a #r #e #space #tab
(=) #( ("car") "candidate"
("cons") #( ("replace-candidate") ("cdr") "candidate"

("replace-candidate") "candidate"
comment: #s #q #u #a #r #e #space #tab
(always)
nil

("candidate-confirmed?") "candidate" "exemplar"
comment: empty "exemplar" -> returns #true if "candidate" matches the "exemplar"
("null?") "exemplar"
("or") ("null?") "candidate"
       ("or") (=) #space ("car") "candidate"
              (=) #tab ("car") "candidate"

("candidate-confirmed?") "candidate" "exemplar"
comment: empty "candidate" -> returns #true if "candidate" matches the "exemplar"
("null?") "candidate"
"#false"

("candidate-confirmed?") "candidate" "exemplar"
comment: "candidate" has leading parentheses -> returns #true if "candidate" matches the "exemplar"
(=) #( ("car") "candidate"
("candidate-confirmed?") ("cdr") "candidate" "exemplar"

("candidate-confirmed?") "candidate" "exemplar"
comment: first characters agree -> returns #true if "candidate" matches the "exemplar"
(always)
("and") (=) ("car") "candidate" ("car") "exemplar"
        ("candidate-confirmed?") ("cdr") "candidate" ("cdr") "exemplar"
       
("grab-candidate") "program"
comment: empty "program" -> grabs a candidate to be stripped away
("null?") "program"
nil

("grab-candidate") "program"
comment: character of "program" is #space or #tab -> grabs a candidate to be stripped away
("or") (=) #space ("car") "program"
       (=) #tab ("car") "program"
("grab-candidate1") "program"

("grab-candidate") "program"
comment: character of "program" is not #space or #tab -> grabs a candidate to be stripped away
(always)
("cons") ("car") "program" ("grab-candidate") ("cdr") "program"

("grab-candidate1") "program"
comment: empty program -> grabs a candidate to be stripped away
("null?") "program"
nil

("grab-candidate1") "program"
comment: character is #space -> grabs a candidate to be stripped away
(=) #space ("car") "program"
("cons") #space ("grab-candidate1") ("cdr") "program"

("grab-candidate1") "program"
comment: character is #tab -> grabs a candidate to be stripped away
(=) #tab ("car") "program"
("cons") #tab ("grab-candidate1") ("cdr") "program"

("grab-candidate1") "program"
comment: character is non white space -> grabs a candidate to be stripped away
(always)
nil

("strip") "program"
comment: takes a Racket "program" of characters -> strips out 001 through 099
(always)
("foldr") "append" nil ("map") "strip3" ("strip1") "program"

("strip1") "program"
comment: empty "program" -> gathers up the candidates
("null?") "program"
nil

("strip1") "program"
comment: #( #0 #0 #1 #space #a #l #w #a #y #s
(=) ("car") "program" #(
("strip2") ("grab-candidate") "program" "program"

("strip1") "program"
comment: #a #l #w #a #y #s
(always)
("cons") (wrap) ("car") "program"
         ("strip1") ("cdr") "program"
       
("strip2") "candidate" "program"
comment: conses up the list of candidates
(always)
("cons") "candidate"
         ("strip1") ("remove-leading") ("length") "candidate" "program"

("strip3") "candidate"
comment: remove 001
("candidate-confirmed?") "candidate" (wrap6) #Z #E #D #0 #0 #1
("replace-candidate") "candidate"

("strip3") "candidate"
comment: remove 002
("candidate-confirmed?") "candidate" (wrap6) #Z #E #D #0 #0 #2
("replace-candidate") "candidate"

("strip3") "candidate"
comment: remove 003
("candidate-confirmed?") "candidate" (wrap6) #Z #E #D #0 #0 #3
("replace-candidate") "candidate"

("strip3") "candidate"
comment: remove 004
("candidate-confirmed?") "candidate" (wrap6) #Z #E #D #0 #0 #4
("replace-candidate") "candidate"

("strip3") "candidate"
comment: remove 005
("candidate-confirmed?") "candidate" (wrap6) #Z #E #D #0 #0 #5
("replace-candidate") "candidate"

("strip3") "candidate"
comment: remove 006
("candidate-confirmed?") "candidate" (wrap6) #Z #E #D #0 #0 #6
("replace-candidate") "candidate"

("strip3") "candidate"
comment: remove 007
("candidate-confirmed?") "candidate" (wrap6) #Z #E #D #0 #0 #7
("replace-candidate") "candidate"

("strip3") "candidate"
comment: remove 008
("candidate-confirmed?") "candidate" (wrap6) #Z #E #D #0 #0 #8
("replace-candidate") "candidate"

("strip3") "candidate"
comment: remove 009
("candidate-confirmed?") "candidate" (wrap6) #Z #E #D #0 #0 #9
("replace-candidate") "candidate"

("strip3") "candidate"
comment: remove 010
("candidate-confirmed?") "candidate" (wrap6) #Z #E #D #0 #1 #0
("replace-candidate") "candidate"

("strip3") "candidate"
comment: remove 011
("candidate-confirmed?") "candidate" (wrap6) #Z #E #D #0 #1 #1
("replace-candidate") "candidate"

("strip3") "candidate"
comment: remove 012
("candidate-confirmed?") "candidate" (wrap6) #Z #E #D #0 #1 #2
("replace-candidate") "candidate"

("strip3") "candidate"
comment: remove 013
("candidate-confirmed?") "candidate" (wrap6) #Z #E #D #0 #1 #3
("replace-candidate") "candidate"

("strip3") "candidate"
comment: remove 014
("candidate-confirmed?") "candidate" (wrap6) #Z #E #D #0 #1 #4
("replace-candidate") "candidate"

("strip3") "candidate"
comment: remove 015
("candidate-confirmed?") "candidate" (wrap6) #Z #E #D #0 #1 #5
("replace-candidate") "candidate"

("strip3") "candidate"
comment: remove 016
("candidate-confirmed?") "candidate" (wrap6) #Z #E #D #0 #1 #6
("replace-candidate") "candidate"

("strip3") "candidate"
comment: remove 017
("candidate-confirmed?") "candidate" (wrap6) #Z #E #D #0 #1 #7
("replace-candidate") "candidate"

("strip3") "candidate"
comment: remove 018
("candidate-confirmed?") "candidate" (wrap6) #Z #E #D #0 #1 #8
("replace-candidate") "candidate"

("strip3") "candidate"
comment: remove 019
("candidate-confirmed?") "candidate" (wrap6) #Z #E #D #0 #1 #9
("replace-candidate") "candidate"

("strip3") "candidate"
comment: remove 020
("candidate-confirmed?") "candidate" (wrap6) #Z #E #D #0 #2 #0
("replace-candidate") "candidate"

("strip3") "candidate"
comment: remove 021
("candidate-confirmed?") "candidate" (wrap6) #Z #E #D #0 #2 #1
("replace-candidate") "candidate"

("strip3") "candidate"
comment: remove 022
("candidate-confirmed?") "candidate" (wrap6) #Z #E #D #0 #2 #2
("replace-candidate") "candidate"

("strip3") "candidate"
comment: remove 023
("candidate-confirmed?") "candidate" (wrap6) #Z #E #D #0 #2 #3
("replace-candidate") "candidate"

("strip3") "candidate"
comment: remove 024
("candidate-confirmed?") "candidate" (wrap6) #Z #E #D #0 #2 #4
("replace-candidate") "candidate"

("strip3") "candidate"
comment: remove 025
("candidate-confirmed?") "candidate" (wrap6) #Z #E #D #0 #2 #5
("replace-candidate") "candidate"

("strip3") "candidate"
comment: remove 026
("candidate-confirmed?") "candidate" (wrap6) #Z #E #D #0 #2 #6
("replace-candidate") "candidate"

("strip3") "candidate"
comment: remove 027
("candidate-confirmed?") "candidate" (wrap6) #Z #E #D #0 #2 #7
("replace-candidate") "candidate"

("strip3") "candidate"
comment: remove 028
("candidate-confirmed?") "candidate" (wrap6) #Z #E #D #0 #2 #8
("replace-candidate") "candidate"

("strip3") "candidate"
comment: remove 029
("candidate-confirmed?") "candidate" (wrap6) #Z #E #D #0 #2 #9
("replace-candidate") "candidate"

("strip3") "candidate"
comment: remove 030
("candidate-confirmed?") "candidate" (wrap6) #Z #E #D #0 #3 #0
("replace-candidate") "candidate"

("strip3") "candidate"
comment: remove 031
("candidate-confirmed?") "candidate" (wrap6) #Z #E #D #0 #3 #1
("replace-candidate") "candidate"

("strip3") "candidate"
comment: remove 032
("candidate-confirmed?") "candidate" (wrap6) #Z #E #D #0 #3 #2
("replace-candidate") "candidate"

("strip3") "candidate"
comment: remove 033
("candidate-confirmed?") "candidate" (wrap6) #Z #E #D #0 #3 #3
("replace-candidate") "candidate"

("strip3") "candidate"
comment: remove 034
("candidate-confirmed?") "candidate" (wrap6) #Z #E #D #0 #3 #4
("replace-candidate") "candidate"

("strip3") "candidate"
comment: remove 035
("candidate-confirmed?") "candidate" (wrap6) #Z #E #D #0 #3 #5
("replace-candidate") "candidate"

("strip3") "candidate"
comment: remove 036
("candidate-confirmed?") "candidate" (wrap6) #Z #E #D #0 #3 #6
("replace-candidate") "candidate"

("strip3") "candidate"
comment: remove 037
("candidate-confirmed?") "candidate" (wrap6) #Z #E #D #0 #3 #7
("replace-candidate") "candidate"

("strip3") "candidate"
comment: remove 038
("candidate-confirmed?") "candidate" (wrap6) #Z #E #D #0 #3 #8
("replace-candidate") "candidate"

("strip3") "candidate"
comment: remove 039
("candidate-confirmed?") "candidate" (wrap6) #Z #E #D #0 #3 #9
("replace-candidate") "candidate"

("strip3") "candidate"
comment: remove 040
("candidate-confirmed?") "candidate" (wrap6) #Z #E #D #0 #4 #0
("replace-candidate") "candidate"

("strip3") "candidate"
comment: remove 041
("candidate-confirmed?") "candidate" (wrap6) #Z #E #D #0 #4 #1
("replace-candidate") "candidate"

("strip3") "candidate"
comment: remove 042
("candidate-confirmed?") "candidate" (wrap6) #Z #E #D #0 #4 #2
("replace-candidate") "candidate"

("strip3") "candidate"
comment: remove 043
("candidate-confirmed?") "candidate" (wrap6) #Z #E #D #0 #4 #3
("replace-candidate") "candidate"

("strip3") "candidate"
comment: remove 044
("candidate-confirmed?") "candidate" (wrap6) #Z #E #D #0 #4 #4
("replace-candidate") "candidate"

("strip3") "candidate"
comment: remove 045
("candidate-confirmed?") "candidate" (wrap6) #Z #E #D #0 #4 #5
("replace-candidate") "candidate"

("strip3") "candidate"
comment: remove 046
("candidate-confirmed?") "candidate" (wrap6) #Z #E #D #0 #4 #6
("replace-candidate") "candidate"

("strip3") "candidate"
comment: remove 047
("candidate-confirmed?") "candidate" (wrap6) #Z #E #D #0 #4 #7
("replace-candidate") "candidate"

("strip3") "candidate"
comment: remove 048
("candidate-confirmed?") "candidate" (wrap6) #Z #E #D #0 #4 #8
("replace-candidate") "candidate"

("strip3") "candidate"
comment: remove 049
("candidate-confirmed?") "candidate" (wrap6) #Z #E #D #0 #4 #9
("replace-candidate") "candidate"

("strip3") "candidate"
comment: remove 050
("candidate-confirmed?") "candidate" (wrap6) #Z #E #D #0 #5 #0
("replace-candidate") "candidate"

("strip3") "candidate"
comment: remove 051
("candidate-confirmed?") "candidate" (wrap6) #Z #E #D #0 #5 #1
("replace-candidate") "candidate"

("strip3") "candidate"
comment: remove 052
("candidate-confirmed?") "candidate" (wrap6) #Z #E #D #0 #5 #2
("replace-candidate") "candidate"

("strip3") "candidate"
comment: remove 053
("candidate-confirmed?") "candidate" (wrap6) #Z #E #D #0 #5 #3
("replace-candidate") "candidate"

("strip3") "candidate"
comment: remove 054
("candidate-confirmed?") "candidate" (wrap6) #Z #E #D #0 #5 #4
("replace-candidate") "candidate"

("strip3") "candidate"
comment: remove 055
("candidate-confirmed?") "candidate" (wrap6) #Z #E #D #0 #5 #5
("replace-candidate") "candidate"

("strip3") "candidate"
comment: remove 056
("candidate-confirmed?") "candidate" (wrap6) #Z #E #D #0 #5 #6
("replace-candidate") "candidate"

("strip3") "candidate"
comment: remove 057
("candidate-confirmed?") "candidate" (wrap6) #Z #E #D #0 #5 #7
("replace-candidate") "candidate"

("strip3") "candidate"
comment: remove 058
("candidate-confirmed?") "candidate" (wrap6) #Z #E #D #0 #5 #8
("replace-candidate") "candidate"

("strip3") "candidate"
comment: remove 059
("candidate-confirmed?") "candidate" (wrap6) #Z #E #D #0 #5 #9
("replace-candidate") "candidate"

("strip3") "candidate"
comment: remove 060
("candidate-confirmed?") "candidate" (wrap6) #Z #E #D #0 #6 #0
("replace-candidate") "candidate"

("strip3") "candidate"
comment: remove 061
("candidate-confirmed?") "candidate" (wrap6) #Z #E #D #0 #6 #1
("replace-candidate") "candidate"

("strip3") "candidate"
comment: remove 062
("candidate-confirmed?") "candidate" (wrap6) #Z #E #D #0 #6 #2
("replace-candidate") "candidate"

("strip3") "candidate"
comment: remove 063
("candidate-confirmed?") "candidate" (wrap6) #Z #E #D #0 #6 #3
("replace-candidate") "candidate"

("strip3") "candidate"
comment: remove 064
("candidate-confirmed?") "candidate" (wrap6) #Z #E #D #0 #6 #4
("replace-candidate") "candidate"

("strip3") "candidate"
comment: remove 065
("candidate-confirmed?") "candidate" (wrap6) #Z #E #D #0 #6 #5
("replace-candidate") "candidate"

("strip3") "candidate"
comment: remove 066
("candidate-confirmed?") "candidate" (wrap6) #Z #E #D #0 #6 #6
("replace-candidate") "candidate"

("strip3") "candidate"
comment: remove 067
("candidate-confirmed?") "candidate" (wrap6) #Z #E #D #0 #6 #7
("replace-candidate") "candidate"

("strip3") "candidate"
comment: remove 068
("candidate-confirmed?") "candidate" (wrap6) #Z #E #D #0 #6 #8
("replace-candidate") "candidate"

("strip3") "candidate"
comment: remove 069
("candidate-confirmed?") "candidate" (wrap6) #Z #E #D #0 #6 #9
("replace-candidate") "candidate"

("strip3") "candidate"
comment: remove 070
("candidate-confirmed?") "candidate" (wrap6) #Z #E #D #0 #7 #0
("replace-candidate") "candidate"

("strip3") "candidate"
comment: remove 071
("candidate-confirmed?") "candidate" (wrap6) #Z #E #D #0 #7 #1
("replace-candidate") "candidate"

("strip3") "candidate"
comment: remove 072
("candidate-confirmed?") "candidate" (wrap6) #Z #E #D #0 #7 #2
("replace-candidate") "candidate"

("strip3") "candidate"
comment: remove 073
("candidate-confirmed?") "candidate" (wrap6) #Z #E #D #0 #7 #3
("replace-candidate") "candidate"

("strip3") "candidate"
comment: remove 074
("candidate-confirmed?") "candidate" (wrap6) #Z #E #D #0 #7 #4
("replace-candidate") "candidate"

("strip3") "candidate"
comment: remove 075
("candidate-confirmed?") "candidate" (wrap6) #Z #E #D #0 #7 #5
("replace-candidate") "candidate"

("strip3") "candidate"
comment: remove 076
("candidate-confirmed?") "candidate" (wrap6) #Z #E #D #0 #7 #6
("replace-candidate") "candidate"

("strip3") "candidate"
comment: remove 077
("candidate-confirmed?") "candidate" (wrap6) #Z #E #D #0 #7 #7
("replace-candidate") "candidate"

("strip3") "candidate"
comment: remove 078
("candidate-confirmed?") "candidate" (wrap6) #Z #E #D #0 #7 #8
("replace-candidate") "candidate"

("strip3") "candidate"
comment: remove 079
("candidate-confirmed?") "candidate" (wrap6) #Z #E #D #0 #7 #9
("replace-candidate") "candidate"

("strip3") "candidate"
comment: remove 080
("candidate-confirmed?") "candidate" (wrap6) #Z #E #D #0 #8 #0
("replace-candidate") "candidate"

("strip3") "candidate"
comment: remove 081
("candidate-confirmed?") "candidate" (wrap6) #Z #E #D #0 #8 #1
("replace-candidate") "candidate"

("strip3") "candidate"
comment: remove 082
("candidate-confirmed?") "candidate" (wrap6) #Z #E #D #0 #8 #2
("replace-candidate") "candidate"

("strip3") "candidate"
comment: remove 083
("candidate-confirmed?") "candidate" (wrap6) #Z #E #D #0 #8 #3
("replace-candidate") "candidate"

("strip3") "candidate"
comment: remove 084
("candidate-confirmed?") "candidate" (wrap6) #Z #E #D #0 #8 #4
("replace-candidate") "candidate"

("strip3") "candidate"
comment: remove 085
("candidate-confirmed?") "candidate" (wrap6) #Z #E #D #0 #8 #5
("replace-candidate") "candidate"

("strip3") "candidate"
comment: remove 086
("candidate-confirmed?") "candidate" (wrap6) #Z #E #D #0 #8 #6
("replace-candidate") "candidate"

("strip3") "candidate"
comment: remove 087
("candidate-confirmed?") "candidate" (wrap6) #Z #E #D #0 #8 #7
("replace-candidate") "candidate"

("strip3") "candidate"
comment: remove 088
("candidate-confirmed?") "candidate" (wrap6) #Z #E #D #0 #8 #8
("replace-candidate") "candidate"

("strip3") "candidate"
comment: remove 089
("candidate-confirmed?") "candidate" (wrap6) #Z #E #D #0 #8 #9
("replace-candidate") "candidate"

("strip3") "candidate"
comment: remove 090
("candidate-confirmed?") "candidate" (wrap6) #Z #E #D #0 #9 #0
("replace-candidate") "candidate"

("strip3") "candidate"
comment: remove 091
("candidate-confirmed?") "candidate" (wrap6) #Z #E #D #0 #9 #1
("replace-candidate") "candidate"

("strip3") "candidate"
comment: remove 092
("candidate-confirmed?") "candidate" (wrap6) #Z #E #D #0 #9 #2
("replace-candidate") "candidate"

("strip3") "candidate"
comment: remove 093
("candidate-confirmed?") "candidate" (wrap6) #Z #E #D #0 #9 #3
("replace-candidate") "candidate"

("strip3") "candidate"
comment: remove 094
("candidate-confirmed?") "candidate" (wrap6) #Z #E #D #0 #9 #4
("replace-candidate") "candidate"

("strip3") "candidate"
comment: remove 095
("candidate-confirmed?") "candidate" (wrap6) #Z #E #D #0 #9 #5
("replace-candidate") "candidate"

("strip3") "candidate"
comment: remove 096
("candidate-confirmed?") "candidate" (wrap6) #Z #E #D #0 #9 #6
("replace-candidate") "candidate"

("strip3") "candidate"
comment: remove 097
("candidate-confirmed?") "candidate" (wrap6) #Z #E #D #0 #9 #7
("replace-candidate") "candidate"

("strip3") "candidate"
comment: remove 098
("candidate-confirmed?") "candidate" (wrap6) #Z #E #D #0 #9 #8
("replace-candidate") "candidate"

("strip3") "candidate"
comment: remove 099
("candidate-confirmed?") "candidate" (wrap6) #Z #E #D #0 #9 #9
("replace-candidate") "candidate"

("strip3") "candidate"
comment: "candidate" did not match
(always)
"candidate"

("write-all!") "output-port" "program"
comment: empty "program" -> write out "program" to "output-port" and close "output-port"
("null?") "program"
("close-output-port") "output-port"

("write-all!") "output-port" "program"
comment: non empty "program" -> write out "program" to "output-port" and close "output-port"
(always)
("begin") ("write-char") ("car") "program" "output-port"
          ("write-all!") "output-port" ("cdr") "program"

("my-compile")
comment: compile both normal and debug versions
(always)
("my-compile-a") ("must-get-file")

("my-compile-a") "source"
comment: compile both normal and debug versions
(always)
("begin") ("my-compile-b") ("open-input-file") "source"
          ("my-compile-c") ("open-input-file") "source"
         
("my-compile-b") "source-port"
comment: compile normally
(always)
("my-compile1")
  "source-port"
  ("open-input-file")
    ""C:\\Users\\Zelah\\Desktop\\ZEDWIN\\PRELUDE.txt""
  ""C:\\Users\\Zelah\\Desktop\\ZEDWIN\\TEMP.TEMP""
  ("begin") ("when-file-exists")
              ""C:\\Users\\Zelah\\Desktop\\ZEDWIN\\TEMP.TEMP""
            ("open-output-file")
              ""C:\\Users\\Zelah\\Desktop\\ZEDWIN\\TEMP.TEMP""
  ("begin") ("when-file-exists")
              ""C:\\Users\\Zelah\\Desktop\\ZEDWIN\\RACKET1.rkt""
            ("open-output-file")
              ""C:\\Users\\Zelah\\Desktop\\ZEDWIN\\RACKET1.rkt""
  "read-sentences"

("my-compile-c") "source-port"
comment: compile in debug mode
(always)
("my-compile1")
  "source-port"
  ("open-input-file")
    ""C:\\Users\\Zelah\\Desktop\\ZEDWIN\\PRELUDE.txt""
  ""C:\\Users\\Zelah\\Desktop\\ZEDWIN\\TEMP.TEMP""
  ("begin") ("when-file-exists")
              ""C:\\Users\\Zelah\\Desktop\\ZEDWIN\\TEMP.TEMP""
            ("open-output-file")
              ""C:\\Users\\Zelah\\Desktop\\ZEDWIN\\TEMP.TEMP""
  ("begin") ("when-file-exists")
              ""C:\\Users\\Zelah\\Desktop\\ZEDWIN\\RACKET2.rkt""
            ("open-output-file")
              ""C:\\Users\\Zelah\\Desktop\\ZEDWIN\\RACKET2.rkt""
  "debug-sentences"
 
("must-get-file")
comment: must choose a file
(always)
("must-get-file1") ("get-file")

("must-get-file1") path
comment: must choose a file
path
path

("must-get-file1") path
comment: must choose a file
(always)
("must-get-file")

("when-file-exists") "path"
comment: ensure file can be written
("file-exists?") "path"
("delete-file") "path"

("not-return?") character
comment: #Z
(always)
("not") (=) #return character

("my-compile1") "ZED" "PRELUDE" "TEMP-path" "TEMP" "RACKET" "read/debug-sentences"
comment: generate combined
(always)
("my-compile2") "ZED"
                "PRELUDE"
                "TEMP-path"
                "TEMP"
                "RACKET"
                ("combine-program-clauses")
                  ("by-three")
                    (002) "read/debug-sentences"
                      ("discard-comments")
                        ("sentences")
                          ("leading-newlines")
                            ("space-newline")
                              ("tab-replace")
                                ("newline-space-tab-repeats")
                                  ("newline-space")
                                    ("filter") "not-return?"
                                               ("append") ("append")
                                                 ("read-all!") "PRELUDE"
                                                 (wrap2) #newline #newline
                                                 ("read-all!") "ZED"

("my-compile2") "ZED" "PRELUDE" "TEMP-path" "TEMP" "RACKET" "combined"
comment: programize program
(always)
("my-compile3") "ZED"
                "PRELUDE"
                "TEMP-path"
                "TEMP"
                "RACKET"
                ("programize") "combined" ("arity-hash") "combined"

("my-compile3") "ZED" "PRELUDE" "TEMP-path" "TEMP" "RACKET" "programized"
comment: write out the compiled program
(always)
("begin") ("display") ""#lang"" "TEMP"
          ("begin") ("display") #space "TEMP"
          ("begin") ("display") ""racket/gui"" "TEMP"
          ("begin") ("newline") "TEMP"
          ("begin") ("display") ("primitives") "TEMP"
          ("begin") ("newline") "TEMP"
          ("begin") ("display") "programized" "TEMP"
          ("begin") ("close-output-port") "TEMP"
          ("my-compile4") ("open-input-file") "TEMP-path" "RACKET"

("my-compile4") "TEMP" "RACKET"
comment: write out the compiled program
(always)
("write-all!") "RACKET" ("strip") ("read-all!") "TEMP"

No comments:

Post a Comment