diff --git a/brmsaptool.scm b/brmsaptool.scm index 9f7a8d6..90a7d90 100644 --- a/brmsaptool.scm +++ b/brmsaptool.scm @@ -57,12 +57,18 @@ ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; Dictionary +;; Returns an empty dictionary represented as empty list. (define (make-dict) '()) +;; Checks whether given dictionary d contains the key k. (define (dict-has-key? d k) (if (assq k d) #t #f)) +;; Retrieves the value for key k from dictionary d. If third argument +;; is provided it is used as default value in case the key does not +;; exist. If only two arguments are given and the key does not exist, +;; raises an error. (define (dict-ref d k . r) (let ((p (assq k d))) (if p @@ -71,6 +77,8 @@ (error 'dict-ref "Key does not exist" k) (car r))))) +;; Returns a new dictionary based on d with key k removed. If it +;; doesn't contain the key, an error is raised. (define (dict-remove d k) (let loop ((s d) (r '()) @@ -83,6 +91,9 @@ (loop (cdr s) r #f) (loop (cdr s) (cons (car s) r) e))))) +;; Adds a new value v under the key k to the dictionary d possibly +;; overwriting any value which has been stored under the key +;; before. Returns the updated dictionary. (define (dict-set d k v) (let ((dr (let loop ((s d) (r '())) @@ -94,6 +105,7 @@ (cons (cons k v) dr))) +;; Returns the list of keys stored in given dictionary. (define (dict-keys d) (map car d))