From 2078128137ca07999df79fb8e7757637948bf998 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Hugo=20H=C3=B6rnquist?= Date: Tue, 28 Jun 2022 16:27:49 +0200 Subject: Remove set! from datetime. --- module/datetime.scm | 27 ++++++++++----------------- 1 file changed, 10 insertions(+), 17 deletions(-) diff --git a/module/datetime.scm b/module/datetime.scm index fce248e1..8bba6e89 100644 --- a/module/datetime.scm +++ b/module/datetime.scm @@ -12,7 +12,6 @@ :use-module ((hnh util) :select ( vector-last - set! -> ->> swap @@ -1274,14 +1273,15 @@ Returns -1 on failure" (values hour-almost-fixed 0))) ;;; PLUS -(define (time+ base . rest) - (let ((sum 0)) - (let ((time (fold (lambda (next done) - (let ((next-time rem (time+% done next))) - (set! sum = (+ rem)) - next-time)) - base rest))) - (values time sum)))) +(define (time± proc) + (lambda (base . rest) + (let loop ((time-accumulated base) (overflow 0) (remaining rest)) + (if (null? remaining) + (values time-accumulated overflow) + (let ((next-time rem (proc time-accumulated (car remaining)))) + (loop next-time (+ overflow rem) (cdr remaining))))))) + +(define time+ (time± time+%)) ;; time, Δtime → time, hour (define (time-% base change) @@ -1324,14 +1324,7 @@ Returns -1 on failure" ;; (time- #10:00:00 (time hour: 48)) ; => 10:00:00 => 2 ;; (time- #10:00:00 (time hour: (+ 48 4))) ; => 06:00:00 => 2 ;; @end lisp -(define (time- base . rest) - (let ((sum 0)) - (let ((time (fold (lambda (next done) - (let ((next-time rem (time-% done next))) - (set! sum = (+ rem)) - next-time)) - base rest))) - (values time sum)))) +(define time- (time± time-%)) ;;; DATETIME -- cgit v1.2.3