Dictionary reduce, prepare members-base usage.
This commit is contained in:
parent
e26b78b254
commit
77204b80e4
3 changed files with 56 additions and 5 deletions
|
@ -50,6 +50,10 @@
|
|||
(members-base-tests!)
|
||||
(newline)
|
||||
|
||||
;; Command-line options and configurable parameters
|
||||
(define *members-directory* (make-parameter "members"))
|
||||
|
||||
;; Arguments parsing
|
||||
(command-line
|
||||
print-help
|
||||
(-h () "This help"
|
||||
|
@ -58,9 +62,13 @@
|
|||
(print-help)
|
||||
(newline)
|
||||
(exit 0))
|
||||
(-MB (dir) "Members base directory" (*members-directory* dir))
|
||||
(-mfkw () "Member-File invalid Key Warning" (*member-file-check-syntax* 'warning))
|
||||
(-mfkq () "Member-File invalid Key Quiet" (*member-file-check-syntax* 'quiet))
|
||||
(-mfec (n) "Member-File parser Error Context (lines)" (*member-file-context* (string->number n))))
|
||||
|
||||
(load-members "members" #t)
|
||||
;; Load the members database (required for everything anyway)
|
||||
(define MB (load-members "members" #t))
|
||||
|
||||
;; ...
|
||||
(void)
|
||||
|
|
|
@ -34,6 +34,7 @@
|
|||
dict-keys
|
||||
dict-map
|
||||
dict-filter
|
||||
dict-reduce
|
||||
dictionary-tests!
|
||||
)
|
||||
|
||||
|
@ -117,6 +118,16 @@
|
|||
(cons (car d) r)
|
||||
r)))))
|
||||
|
||||
;; Reduce over dictinary, the reducing procedure gets accumulator,
|
||||
;; key and value as its three arguments.
|
||||
(define (dict-reduce init proc d)
|
||||
(let loop ((d d)
|
||||
(acc init))
|
||||
(if (null? d)
|
||||
acc
|
||||
(loop (cdr d)
|
||||
(proc acc (caar d) (cdar d))))))
|
||||
|
||||
;; Performs self-tests of the dictionary module.
|
||||
(define (dictionary-tests!)
|
||||
(run-tests
|
||||
|
@ -144,6 +155,9 @@
|
|||
'((a . 1)
|
||||
(b . 2)))
|
||||
'((a . 1)))
|
||||
(test-eq? dict-reduce
|
||||
(dict-reduce 0 (lambda (a k v) (+ a v)) '((a . 1) (b . 2)))
|
||||
3)
|
||||
))
|
||||
|
||||
)
|
||||
|
|
|
@ -117,6 +117,15 @@
|
|||
#t
|
||||
(loop (cdr lst))))))
|
||||
|
||||
;; Returns the first 4-digit symbol from the list.
|
||||
(define (get-4digit-symbol-from-list lst)
|
||||
(let loop ((lst lst))
|
||||
(if (null? lst)
|
||||
#f
|
||||
(if (is-4digit-symbol? (car lst))
|
||||
(car lst)
|
||||
(loop (cdr lst))))))
|
||||
|
||||
;; Returns dictionary containing only records with either 4-digit
|
||||
;; name or one of its aliases being 4-digit.
|
||||
(define (files-dictionary-filter-4digit-symbols d)
|
||||
|
@ -138,7 +147,8 @@
|
|||
(make-pathname mdir fname)))))
|
||||
|
||||
;; Loads members database, if the second argument is true, shows
|
||||
;; progress.
|
||||
;; progress. Members database is a dictionary with id being the key
|
||||
;; (number) and member record being the value.
|
||||
(define (load-members dn . opts)
|
||||
(let ((progress? (and (not (null? opts))
|
||||
(car opts))))
|
||||
|
@ -147,17 +157,33 @@
|
|||
(let* ((fss (files-dictionary-filter-4digit-symbols
|
||||
(files+symlinks->files-dictionary
|
||||
(get-files+symlinks dn))))
|
||||
(mb (dict-map
|
||||
(mb0 (dict-map
|
||||
(lambda (symfn symlinks)
|
||||
(when progress?
|
||||
(display "."))
|
||||
(members-base-load-member dn
|
||||
(symbol->string symfn)
|
||||
symlinks))
|
||||
fss)))
|
||||
fss))
|
||||
(mb (dict-reduce (make-dict)
|
||||
(lambda (acc key val)
|
||||
#f)
|
||||
mb0)))
|
||||
(when progress?
|
||||
(print " ok."))
|
||||
mb)))
|
||||
mb0)))
|
||||
|
||||
(define (find-member-by-id mb id)
|
||||
#f)
|
||||
|
||||
(define (find-member-by-nick mb nick)
|
||||
#f)
|
||||
|
||||
(define (list-members-ids mb)
|
||||
#f)
|
||||
|
||||
(define (list-members-nicks mb)
|
||||
#f)
|
||||
|
||||
;; Performs self-tests of this module.
|
||||
(define (members-base-tests!)
|
||||
|
@ -181,6 +207,9 @@
|
|||
(test-false is-4digit-symbol? (is-4digit-symbol? '|ABC|))
|
||||
(test-true list-contains-4digit-symbol? (list-contains-4digit-symbol? '(|0000| abc |666|)))
|
||||
(test-false list-contains-4digit-symbol? (list-contains-4digit-symbol? '(|00000| abc |666|)))
|
||||
(test-eq? get-4digit-symbol-from-list
|
||||
(get-4digit-symbol-from-list '(|000| abc |6666| qwer))
|
||||
'|6666|)
|
||||
))
|
||||
|
||||
)
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue