summaryrefslogtreecommitdiff
path: root/spellcheck/dictionary.scm
diff options
context:
space:
mode:
authorbd <bdunahu@operationnull.com>2024-05-24 18:21:35 -0600
committerbd <bdunahu@operationnull.com>2024-05-24 18:21:35 -0600
commit6b40eb033d9c0bda4006f23426c34ef8fda4a0d5 (patch)
treef0efe82e05d27b4056be76baca258880a0698c98 /spellcheck/dictionary.scm
parent5df534c4e3893a9f7a4f528746eca98d7a012736 (diff)
Add partial "mutate" implementation, failing tests
Diffstat (limited to 'spellcheck/dictionary.scm')
-rw-r--r--spellcheck/dictionary.scm36
1 files changed, 36 insertions, 0 deletions
diff --git a/spellcheck/dictionary.scm b/spellcheck/dictionary.scm
new file mode 100644
index 0000000..856fec5
--- /dev/null
+++ b/spellcheck/dictionary.scm
@@ -0,0 +1,36 @@
+(define-module (dictionary)
+ #:export (create-dictionary
+ dict-occur-ref
+ dict-keys-ref
+ dict-values-ref))
+
+(define (create-dictionary lst)
+ (dictionary-helper (make-hash-table) lst))
+
+(define (dictionary-helper dict rest)
+ "Recursively adds words to DICT."
+ (if (null? rest)
+ dict
+ (begin
+ (dict-inc-word dict (car rest))
+ (dictionary-helper dict (cdr rest)))))
+
+(define (dict-inc-word dict e)
+ "Inserts word E into the DICT, using E
+as a key and the running total of occurances
+as the value."
+ (hashq-set!
+ dict e (1+ (dict-occur-ref dict e))))
+
+(define (dict-occur-ref dict e)
+ "A wrapper for hashq-ref. Returns '0' if an element
+is not present, rather than '#f'."
+ (or (hashq-ref dict e) 0))
+
+(define (dict-keys-ref dict)
+ "Returns a list of all words in the dictionary."
+ (map car (hash-map->list cons dict)))
+
+(define (dict-values-ref dict)
+ "Sums up the total number of occurances for all words."
+ (apply + (map cdr (hash-map->list cons dict))))