From 2c96707029a138952abc0b664636ab805e48f0ad Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Dominik=20Pant=C5=AF=C4=8Dek?= Date: Sun, 19 Mar 2023 08:00:42 +0100 Subject: [PATCH] Id extraction and filtering. --- member-record.scm | 5 +++++ members-base.scm | 23 ++++++++++++++++------- 2 files changed, 21 insertions(+), 7 deletions(-) diff --git a/member-record.scm b/member-record.scm index efa6d1e..1894b24 100644 --- a/member-record.scm +++ b/member-record.scm @@ -35,6 +35,7 @@ member-active? member-student? member-nick + member-id member-record-tests! ) @@ -124,6 +125,10 @@ (define (member-nick mr) (mr-ref mr 'nick)) + ;; Returns member id + (define (member-id mr) + (mr-ref mr 'id)) + ;; Performs module self-tests. (define (member-record-tests!) (run-tests diff --git a/members-base.scm b/members-base.scm index 397c15c..845a64d 100644 --- a/members-base.scm +++ b/members-base.scm @@ -46,6 +46,7 @@ (chicken irregex) (chicken sort) (chicken string) + (chicken format) testing utils dictionary @@ -247,16 +248,26 @@ (string-intersperse (map member-nick mrs) s))) + ;; To aid in printing lists of records + (define (member-records->ids+nicks-string mrs . sl) + (let ((s (if (null? sl) + ", " + (car sl)))) + (string-intersperse + (map (lambda (mr) + (sprintf "~A (~A)" + (member-id mr) + (member-nick mr))) + mrs)))) + ;; Basic information about members-base in human-readable form. (define (print-members-base-info mb) (let ((nicks (list-members-nicks mb)) (ids (list-members-ids mb))) (print "Known members: " (length nicks)) - (print "Total IDs: " - (length ids) - " (" (length (filter is-4digit-prime? ids)) " valid)") (let ((invalid-ids (filter (compose not is-4digit-prime?) ids)) + (invalid-mrs (filter-members-by-predicate mb (compose not is-4digit-prime? member-id))) (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-destroyed?)) @@ -270,10 +281,8 @@ (print a:highlight " Students (" (length student-mrs) "): " a:default (member-records->nicks-string student-mrs)) (when (not (null? invalid-ids)) - (print a:error " Invalid (" (length invalid-ids) "): " - (string-intersperse - (map number->string invalid-ids) - ", ") + (print a:error " Invalid Id (" (length invalid-mrs) "): " + (member-records->ids+nicks-string invalid-mrs) a:default))))) ;; Performs self-tests of this module.