aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorHugo Hörnquist <hugo@lysator.liu.se>2022-06-28 16:27:49 +0200
committerHugo Hörnquist <hugo@lysator.liu.se>2022-07-07 21:14:09 +0200
commit2078128137ca07999df79fb8e7757637948bf998 (patch)
tree6488a23892578fe29c88d5278e68dcd7188a9d5c
parentAdd time[+-] overflow tests. (diff)
downloadcalp-2078128137ca07999df79fb8e7757637948bf998.tar.gz
calp-2078128137ca07999df79fb8e7757637948bf998.tar.xz
Remove set! from datetime.
-rw-r--r--module/datetime.scm27
1 files 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