mirror of
https://git.savannah.gnu.org/git/guile.git
synced 2025-05-11 00:00:49 +02:00
29 lines
902 B
Scheme
29 lines
902 B
Scheme
;;;"promise.scm" promise for force and delay
|
|
;;; From Revised^4 Report on the Algorithmic Language Scheme
|
|
;;; Editors: William Clinger and Jonathon Rees
|
|
;
|
|
; We intend this report to belong to the entire Scheme community, and so
|
|
; we grant permission to copy it in whole or in part without fee. In
|
|
; particular, we encourage implementors of Scheme to use this report as
|
|
; a starting point for manuals and other documentation, modifying it as
|
|
; necessary.
|
|
|
|
(define promise:force (lambda (object) (object)))
|
|
|
|
(define make-promise
|
|
(lambda (proc)
|
|
(let ((result-ready? #f)
|
|
(result #f))
|
|
(lambda ()
|
|
(if result-ready?
|
|
result
|
|
(let ((x (proc)))
|
|
(if result-ready?
|
|
result
|
|
(begin (set! result-ready? #t)
|
|
(set! result x)
|
|
result))))))))
|
|
|
|
;;; change occurences of (DELAY <expression>) to
|
|
;;; (MAKE-PROMISE (LAMBDA () <expression>))
|
|
;;; and (define force promise:force)
|