OXIESEC PANEL
- Current Dir:
/
/
usr
/
share
/
guile
/
2.0
/
srfi
Server IP: 139.59.38.164
Upload:
Create Dir:
Name
Size
Modified
Perms
π
..
-
04/11/2020 07:13:11 AM
rwxr-xr-x
π
srfi-1.scm
28.41 KB
10/22/2016 08:09:34 PM
rw-r--r--
π
srfi-10.scm
2.76 KB
10/22/2016 08:09:34 PM
rw-r--r--
π
srfi-11.scm
5.38 KB
10/22/2016 08:09:34 PM
rw-r--r--
π
srfi-111.scm
1.28 KB
10/22/2016 08:09:34 PM
rw-r--r--
π
srfi-13.scm
2.72 KB
10/22/2016 08:09:34 PM
rw-r--r--
π
srfi-14.scm
2.33 KB
10/22/2016 08:09:34 PM
rw-r--r--
π
srfi-16.scm
1.84 KB
10/22/2016 08:09:34 PM
rw-r--r--
π
srfi-17.scm
6.42 KB
10/22/2016 08:09:34 PM
rw-r--r--
π
srfi-18.scm
11.91 KB
10/22/2016 08:09:34 PM
rw-r--r--
π
srfi-19.scm
55.92 KB
10/22/2016 08:09:34 PM
rw-r--r--
π
srfi-2.scm
1.08 KB
10/22/2016 08:09:34 PM
rw-r--r--
π
srfi-26.scm
2.58 KB
10/22/2016 08:09:34 PM
rw-r--r--
π
srfi-27.scm
2.98 KB
10/22/2016 08:09:34 PM
rw-r--r--
π
srfi-28.scm
1.17 KB
10/22/2016 08:09:34 PM
rw-r--r--
π
srfi-31.scm
1.36 KB
10/22/2016 08:09:34 PM
rw-r--r--
π
srfi-34.scm
3.2 KB
10/22/2016 08:09:34 PM
rw-r--r--
π
srfi-35.scm
11.98 KB
10/22/2016 08:09:34 PM
rw-r--r--
π
srfi-37.scm
8.37 KB
10/22/2016 08:09:34 PM
rw-r--r--
π
srfi-38.scm
8.19 KB
10/22/2016 08:09:34 PM
rw-r--r--
π
srfi-39.scm
2.11 KB
10/22/2016 08:09:34 PM
rw-r--r--
π
srfi-4
-
04/11/2020 07:13:11 AM
rwxr-xr-x
π
srfi-4.scm
4.99 KB
10/22/2016 08:09:34 PM
rw-r--r--
π
srfi-41.scm
19.91 KB
10/22/2016 08:09:34 PM
rw-r--r--
π
srfi-42
-
04/11/2020 07:13:11 AM
rwxr-xr-x
π
srfi-42.scm
1.75 KB
10/22/2016 08:09:34 PM
rw-r--r--
π
srfi-43.scm
39.07 KB
10/22/2016 08:09:34 PM
rw-r--r--
π
srfi-45.scm
3.5 KB
10/22/2016 08:09:34 PM
rw-r--r--
π
srfi-6.scm
1.56 KB
10/22/2016 08:09:34 PM
rw-r--r--
π
srfi-60.scm
2.12 KB
10/22/2016 08:09:34 PM
rw-r--r--
π
srfi-64
-
04/11/2020 07:13:11 AM
rwxr-xr-x
π
srfi-64.scm
2.51 KB
10/22/2016 08:09:34 PM
rw-r--r--
π
srfi-67
-
04/11/2020 07:13:11 AM
rwxr-xr-x
π
srfi-67.scm
2.31 KB
10/22/2016 08:09:34 PM
rw-r--r--
π
srfi-69.scm
12.7 KB
10/22/2016 08:09:34 PM
rw-r--r--
π
srfi-8.scm
1.08 KB
10/22/2016 08:09:34 PM
rw-r--r--
π
srfi-88.scm
1.71 KB
10/22/2016 08:09:34 PM
rw-r--r--
π
srfi-9
-
04/11/2020 07:13:11 AM
rwxr-xr-x
π
srfi-9.scm
13.11 KB
10/22/2016 08:09:34 PM
rw-r--r--
π
srfi-98.scm
1.57 KB
10/22/2016 08:09:34 PM
rw-r--r--
Editing: srfi-45.scm
Close
;;; srfi-45.scm -- Primitives for Expressing Iterative Lazy Algorithms ;; Copyright (C) 2010, 2011, 2013 Free Software Foundation, Inc. ;; Copyright (C) 2003 AndrΓ© van Tonder. All Rights Reserved. ;; Permission is hereby granted, free of charge, to any person ;; obtaining a copy of this software and associated documentation ;; files (the "Software"), to deal in the Software without ;; restriction, including without limitation the rights to use, copy, ;; modify, merge, publish, distribute, sublicense, and/or sell copies ;; of the Software, and to permit persons to whom the Software is ;; furnished to do so, subject to the following conditions: ;; The above copyright notice and this permission notice shall be ;; included in all copies or substantial portions of the Software. ;; THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, ;; EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF ;; MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND ;; NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS ;; BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ;; ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN ;; CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE ;; SOFTWARE. ;;; Commentary: ;; This is the code of the reference implementation of SRFI-45, modified ;; to use SRFI-9 and to add 'promise?' to the list of exports. ;; This module is documented in the Guile Reference Manual. ;;; Code: (define-module (srfi srfi-45) #:export (delay lazy force eager promise?) #:replace (delay force promise?) #:use-module (srfi srfi-9) #:use-module (srfi srfi-9 gnu)) (cond-expand-provide (current-module) '(srfi-45)) (define-record-type promise (make-promise val) promise? (val promise-val promise-val-set!)) (define-record-type value (make-value tag proc) value? (tag value-tag value-tag-set!) (proc value-proc value-proc-set!)) (define-syntax-rule (lazy exp) (make-promise (make-value 'lazy (lambda () exp)))) (define (eager x) (make-promise (make-value 'eager x))) (define-syntax-rule (delay exp) (lazy (eager exp))) (define (force promise) (let ((content (promise-val promise))) (case (value-tag content) ((eager) (value-proc content)) ((lazy) (let* ((promise* ((value-proc content))) (content (promise-val promise))) ; * (if (not (eqv? (value-tag content) 'eager)) ; * (begin (value-tag-set! content (value-tag (promise-val promise*))) (value-proc-set! content (value-proc (promise-val promise*))) (promise-val-set! 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. (define* (promise-visit promise #:key on-eager on-lazy) (define content (promise-val promise)) (case (value-tag content) ((eager) (on-eager (value-proc content))) ((lazy) (on-lazy (value-proc content))))) (set-record-type-printer! promise (lambda (promise port) (promise-visit promise #:on-eager (lambda (value) (format port "#<promise = ~s>" value)) #:on-lazy (lambda (proc) (format port "#<promise => ~s>" proc)))))