Created
May 13, 2020 12:45
-
-
Save drm343/78d7390fe9357f0a26fb55f30fd87210 to your computer and use it in GitHub Desktop.
demo map
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#lang racket | |
(provide | |
(all-defined-out)) | |
; new table | |
(define empty-table | |
(lambda (name) | |
'())) | |
(define all-keys | |
(lambda (origin-table) | |
(letrec [(search-all-keys | |
(lambda (name value table) | |
(println name) | |
(table search-all-keys)))] | |
(origin-table search-all-keys)))) | |
; extend :: name -> value -> table -> table | |
(define extend | |
(lambda (name value table) | |
(lambda (search) | |
(search name value table)))) | |
; multi-extend :: [name] -> [value] -> table -> table | |
(define multi-extend | |
(lambda (names values table) | |
(if (null? names) | |
table | |
(extend (car names) (box (car values)) | |
(multi-extend (cdr names) (cdr values) table))))) | |
; lookup :: key -> table -> Maybe value | |
(define lookup | |
(lambda (name table) | |
(letrec [(search-by-name | |
(lambda (name2) | |
(lambda (name1 value table) | |
(cond | |
[(eq? name2 name1) value] | |
[else (table (search-by-name name2))]))))] | |
(table (search-by-name name))))) | |
; debug-table :: table -> Nothing | |
(define debug-table | |
(lambda (table) | |
(letrec [( show-all | |
(lambda (name value table) | |
(print name) | |
(print ":") | |
(println value) | |
(table show-all)))] | |
(table show-all)))) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment