Remove scheme-lib/lazy.scm
This commit is contained in:
parent
1108480bd6
commit
1e0cb9d68a
|
@ -1,47 +0,0 @@
|
|||
; SRFI 45: Primitives for Expressing Iterative Lazy Algorithms
|
||||
; by André van Tonder
|
||||
;=========================================================================
|
||||
; Boxes
|
||||
|
||||
(define (box x) (list x))
|
||||
(define unbox car)
|
||||
(define set-box! set-car!)
|
||||
|
||||
;=========================================================================
|
||||
; Primitives for lazy evaluation:
|
||||
|
||||
(define (eager x)
|
||||
(box (cons 'eager x)))
|
||||
|
||||
#|
|
||||
(define-syntax lazy
|
||||
(syntax-rules ()
|
||||
((lazy exp)
|
||||
(box (cons 'lazy (lambda () exp))))))
|
||||
|
||||
(define-syntax delay
|
||||
(syntax-rules ()
|
||||
((delay exp) (lazy (eager exp)))))
|
||||
|#
|
||||
|
||||
(define-macro (lazy exp)
|
||||
`(box (cons 'lazy (lambda () ,exp))))
|
||||
|
||||
(define-macro (delay exp)
|
||||
`(lazy (eager ,exp)))
|
||||
|
||||
(define (force promise)
|
||||
(let ((content (unbox promise)))
|
||||
(case (car content)
|
||||
((eager) (cdr content))
|
||||
((lazy) (let* ((promise* ((cdr content)))
|
||||
(content (unbox promise))) ; *
|
||||
(if (not (eqv? (car content) 'eager)) ; *
|
||||
(begin (set-car! content (car (unbox promise*)))
|
||||
(set-cdr! content (cdr (unbox promise*)))
|
||||
(set-box! promise* content)))
|
||||
(force promise))))))
|
||||
|
||||
; (*) These two lines re-fetch and check the original promise in case
|
||||
; the first line of the let* caused it to be forced. For an example
|
||||
; where this happens, see reentrancy test 3 below.
|
Loading…
Reference in New Issue