Skip to content

Instantly share code, notes, and snippets.

@drm343
Created May 13, 2020 12:45
Show Gist options
  • Save drm343/78d7390fe9357f0a26fb55f30fd87210 to your computer and use it in GitHub Desktop.
Save drm343/78d7390fe9357f0a26fb55f30fd87210 to your computer and use it in GitHub Desktop.
demo map
#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