add some convenience to the enumerators and change call-with-values
into define-values
This commit is contained in:
parent
23fa168309
commit
c11de94f2a
|
@ -20,6 +20,7 @@
|
||||||
empty/e
|
empty/e
|
||||||
const/e
|
const/e
|
||||||
from-list/e
|
from-list/e
|
||||||
|
fin/e
|
||||||
disj-sum/e
|
disj-sum/e
|
||||||
disj-append/e
|
disj-append/e
|
||||||
cons/e
|
cons/e
|
||||||
|
@ -199,6 +200,8 @@
|
||||||
(λ (x)
|
(λ (x)
|
||||||
(hash-ref rev-map x)))))
|
(hash-ref rev-map x)))))
|
||||||
|
|
||||||
|
(define (fin/e . args) (from-list/e (remove-duplicates args)))
|
||||||
|
|
||||||
(define nats/e
|
(define nats/e
|
||||||
(enum +inf.0
|
(enum +inf.0
|
||||||
identity
|
identity
|
||||||
|
@ -554,12 +557,9 @@
|
||||||
[(not (infinite? (size e)))
|
[(not (infinite? (size e)))
|
||||||
(enum +inf.0
|
(enum +inf.0
|
||||||
(λ (n)
|
(λ (n)
|
||||||
(call-with-values
|
(define-values (q r) (quotient/remainder n (size e)))
|
||||||
(λ ()
|
(cons (decode e r)
|
||||||
(quotient/remainder n (size e)))
|
(decode (f (decode e r)) q)))
|
||||||
(λ (q r)
|
|
||||||
(cons (decode e r)
|
|
||||||
(decode (f (decode e r)) q)))))
|
|
||||||
(λ (ab)
|
(λ (ab)
|
||||||
(+ (* (size e) (encode (f (car ab)) (cdr ab)))
|
(+ (* (size e) (encode (f (car ab)) (cdr ab)))
|
||||||
(encode e (car ab)))))]
|
(encode e (car ab)))))]
|
||||||
|
@ -679,12 +679,9 @@
|
||||||
[(not (infinite? (size e)))
|
[(not (infinite? (size e)))
|
||||||
(enum +inf.0
|
(enum +inf.0
|
||||||
(λ (n)
|
(λ (n)
|
||||||
(call-with-values
|
(define-values (q r) (quotient/remainder n (size e)))
|
||||||
(λ ()
|
(cons (decode e r)
|
||||||
(quotient/remainder n (size e)))
|
(decode (f (decode e r)) q)))
|
||||||
(λ (q r)
|
|
||||||
(cons (decode e r)
|
|
||||||
(decode (f (decode e r)) q)))))
|
|
||||||
(λ (ab)
|
(λ (ab)
|
||||||
(+ (* (size e) (encode (f (car ab)) (cdr ab)))
|
(+ (* (size e) (encode (f (car ab)) (cdr ab)))
|
||||||
(encode e (car ab)))))]
|
(encode e (car ab)))))]
|
||||||
|
@ -769,14 +766,17 @@
|
||||||
(λ (x)
|
(λ (x)
|
||||||
(encode (force promise/e) x))))
|
(encode (force promise/e) x))))
|
||||||
|
|
||||||
;; fix/e : size (enum a -> enum a) -> enum a
|
;; fix/e : [size] (enum a -> enum a) -> enum a
|
||||||
(define (fix/e size f/e)
|
(define fix/e
|
||||||
(define self (delay (f/e (fix/e size f/e))))
|
(case-lambda
|
||||||
(enum size
|
[(f/e) (fix/e +inf.0 f/e)]
|
||||||
(λ (n)
|
[(size f/e)
|
||||||
(decode (force self) n))
|
(define self (delay (f/e (fix/e size f/e))))
|
||||||
(λ (x)
|
(enum size
|
||||||
(encode (force self) x))))
|
(λ (n)
|
||||||
|
(decode (force self) n))
|
||||||
|
(λ (x)
|
||||||
|
(encode (force self) x)))]))
|
||||||
|
|
||||||
;; many/e : enum a -> enum (listof a)
|
;; many/e : enum a -> enum (listof a)
|
||||||
;; or : enum a, #:length natural -> enum (listof a)
|
;; or : enum a, #:length natural -> enum (listof a)
|
||||||
|
|
Loading…
Reference in New Issue
Block a user