Work on predicates.

This commit is contained in:
Dominik Pantůček 2023-03-19 07:24:45 +01:00
parent d183e658b1
commit 4b453162cf
2 changed files with 22 additions and 5 deletions

View file

@ -33,6 +33,7 @@
member-destroyed?
member-suspended?
member-active?
member-student?
member-nick
member-record-tests!
)
@ -90,11 +91,24 @@
(month<? (string->month destroyed)
(*current-month*)))))
;; Generic period-based predicate
(define ((member-period-predicate? key) mr)
(let ((periods (mr-ref mr key #f)))
(and periods
(month-in-periods? periods))))
;; Returns true if the member is now suspended
(define (member-suspended? mr)
(let ((suspend (mr-ref mr 'suspend #f)))
(and suspend
(month-in-periods? suspend))))
(define member-suspended?
(member-period-predicate? 'suspend))
;; True if the member is student
(define member-is-student?
(member-period-predicate? 'student))
;; Only active members can be students.
(define (member-student? mr)
(and (member-active? mr)
(member-is-student? mr)))
;; Returns true if the member is active (not suspended or destroyed).
(define (member-active? mr)