From fc3a740c84f2e3433dacd4c96ec390f720f27f61 Mon Sep 17 00:00:00 2001 From: Christopher Lam Date: Thu, 10 Oct 2019 20:17:11 +0800 Subject: [PATCH] [commodity-utilities] compact gnc:pricelist-price-find-nearest using (ice-9 match) --- .../report-system/commodity-utilities.scm | 23 ++++++++----------- 1 file changed, 10 insertions(+), 13 deletions(-) diff --git a/gnucash/report/report-system/commodity-utilities.scm b/gnucash/report/report-system/commodity-utilities.scm index 989c2d6a5d..c6e1f29bb0 100644 --- a/gnucash/report/report-system/commodity-utilities.scm +++ b/gnucash/report/report-system/commodity-utilities.scm @@ -20,6 +20,8 @@ ;; Boston, MA 02110-1301, USA gnu@gnu.org ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +(use-modules (ice-9 match)) + ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; Functions to get splits with interesting data from accounts. @@ -297,19 +299,14 @@ construct with gnc:make-gnc-monetary and gnc:monetary->string instead.") ;; if pricelist was empty, #f. (define (gnc:pricelist-price-find-nearest pricelist date) (let lp ((pricelist pricelist)) - (cond - ((null? pricelist) #f) - ((null? (cdr pricelist)) (cadr (car pricelist))) - (else - (let ((earlier (car pricelist)) - (later (cadr pricelist))) - (cond - ((< (car later) date) - (lp (cdr pricelist))) - ((< (- date (car earlier)) (- (car later) date)) - (cadr earlier)) - (else - (cadr later)))))))) + (match pricelist + (() #f) + (((date price)) price) + (((date1 price1) (date2 price2) . rest) + (cond + ((< date2 date) (lp (cdr pricelist))) + ((< (- date date1) (- date2 date)) price1) + (else price2)))))) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; Functions to get one price at a given time (i.e. not time-variant).