From 688f1d0989c3fa715e60e38e0dd990aec6de7529 Mon Sep 17 00:00:00 2001 From: "Edward L. Platt" Date: Sun, 21 Aug 2022 21:36:43 -0400 Subject: [PATCH] Allow incomplete ballots. * When calling 'update-vote, a rank of #f will remove the associated alternative from the ranking. --- deliberate.scm | 9 +++++++-- test-deliberate.scm | 4 ++-- 2 files changed, 9 insertions(+), 4 deletions(-) diff --git a/deliberate.scm b/deliberate.scm index 37d74fc..2ba3863 100644 --- a/deliberate.scm +++ b/deliberate.scm @@ -211,8 +211,13 @@ ;; A reordered copy of lst ;; (define (reorder lst ranks) - (let ((pairs (zip lst ranks))) - (map car (sort pairs (lambda (a b) (< (cadr a) (cadr b))))))) + (let* ((pairs (zip lst ranks)) + (ranked-pairs + (filter (lambda (pair) (not (eq? #f (cadr pair)))) + pairs)) + (sorted-pairs + (sort ranked-pairs (lambda (a b) (< (cadr a) (cadr b)))))) + (map car sorted-pairs))) diff --git a/test-deliberate.scm b/test-deliberate.scm index 7ed0db0..540c39a 100644 --- a/test-deliberate.scm +++ b/test-deliberate.scm @@ -12,5 +12,5 @@ (define vote (a-run (spawn ^ranked-choice-vote delib ($ delib 'debug-alternatives)))) (define ballot (a-run ($ vote 'add-ballot))) -(define (rank312 alts) '(3 1 2)) -(a-run ($ ballot 'update-vote rank312)) +(define (rank31f alts) '(3 1 #f)) +(a-run ($ ballot 'update-vote rank31f))