diff --git a/member-record.scm b/member-record.scm index e672bb7..bc15c88 100644 --- a/member-record.scm +++ b/member-record.scm @@ -33,6 +33,7 @@ member-destroyed? member-suspended? member-active? + member-nick member-record-tests! ) @@ -100,6 +101,10 @@ (and (not (member-destroyed? mr)) (not (member-suspended? mr)))) + ;; Nickname as string + (define (member-nick mr) + (mr-ref mr 'nick)) + ;; Performs module self-tests. (define (member-record-tests!) (run-tests diff --git a/members-base.scm b/members-base.scm index a7d6cf3..93a3a7a 100644 --- a/members-base.scm +++ b/members-base.scm @@ -222,6 +222,18 @@ (define (list-members-ids mb) (map (lambda (mr) (dict-ref mr 'id)) mb)) + ;; Returns a list of members which match given predicate. + (define (filter-members-by-predicate mb pred) + (let loop ((mb mb) + (res '())) + (if (null? mb) + res + (let ((mr (car mb))) + (loop (cdr mb) + (if (pred mr) + (cons mr res) + res)))))) + ;; Returns all nicks found in the database (define (list-members-nicks mb) (map (lambda (mr) (dict-ref (dict-ref mr 'info) 'nick)) mb)) @@ -241,7 +253,14 @@ (print "Total IDs: " (length ids) " (" (length (filter is-4digit-prime? ids)) " valid)") - (let ((invalid-ids (filter (compose not is-4digit-prime?) ids))) + (let ((invalid-ids (filter (compose not is-4digit-prime?) ids)) + (active-mrs (filter-members-by-predicate mb member-active?)) + (suspended-mrs (filter-members-by-predicate mb member-suspended?)) + (destroyed-mrs (filter-members-by-predicate mb member-suspended?))) + (print " Active (" (length active-mrs) "): " + (string-intersperse + (map member-nick active-mrs) + ", ")) (when (not (null? invalid-ids)) (print " Invalid (" (length invalid-ids) "): " (string-intersperse