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-11.scm
Close
;;; srfi-11.scm --- let-values and let*-values ;; Copyright (C) 2000, 2001, 2002, 2004, 2006, 2009 Free Software Foundation, Inc. ;; ;; This library is free software; you can redistribute it and/or ;; modify it under the terms of the GNU Lesser General Public ;; License as published by the Free Software Foundation; either ;; version 3 of the License, or (at your option) any later version. ;; ;; This library is distributed in the hope that it will be useful, ;; but WITHOUT ANY WARRANTY; without even the implied warranty of ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ;; Lesser General Public License for more details. ;; ;; You should have received a copy of the GNU Lesser General Public ;; License along with this library; if not, write to the Free Software ;; Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA ;;; Commentary: ;; This module exports two syntax forms: let-values and let*-values. ;; ;; Sample usage: ;; ;; (let-values (((x y . z) (foo a b)) ;; ((p q) (bar c))) ;; (baz x y z p q)) ;; ;; This binds `x' and `y' to the first to values returned by `foo', ;; `z' to the rest of the values from `foo', and `p' and `q' to the ;; values returned by `bar'. All of these are available to `baz'. ;; ;; let*-values : let-values :: let* : let ;; ;; This module is fully documented in the Guile Reference Manual. ;;; Code: (define-module (srfi srfi-11) :export-syntax (let-values let*-values)) (cond-expand-provide (current-module) '(srfi-11)) ;;;;;;;;;;;;;; ;; let-values ;; ;; Current approach is to translate ;; ;; (let-values (((x y . z) (foo a b)) ;; ((p q) (bar c))) ;; (baz x y z p q)) ;; ;; into ;; ;; (call-with-values (lambda () (foo a b)) ;; (lambda (<tmp-x> <tmp-y> . <tmp-z>) ;; (call-with-values (lambda () (bar c)) ;; (lambda (<tmp-p> <tmp-q>) ;; (let ((x <tmp-x>) ;; (y <tmp-y>) ;; (z <tmp-z>) ;; (p <tmp-p>) ;; (q <tmp-q>)) ;; (baz x y z p q)))))) ;; We could really use quasisyntax here... (define-syntax let-values (lambda (x) (syntax-case x () ((_ ((binds exp)) b0 b1 ...) (syntax (call-with-values (lambda () exp) (lambda binds b0 b1 ...)))) ((_ (clause ...) b0 b1 ...) (let lp ((clauses (syntax (clause ...))) (ids '()) (tmps '())) (if (null? clauses) (with-syntax (((id ...) ids) ((tmp ...) tmps)) (syntax (let ((id tmp) ...) b0 b1 ...))) (syntax-case (car clauses) () (((var ...) exp) (with-syntax (((new-tmp ...) (generate-temporaries (syntax (var ...)))) ((id ...) ids) ((tmp ...) tmps)) (with-syntax ((inner (lp (cdr clauses) (syntax (var ... id ...)) (syntax (new-tmp ... tmp ...))))) (syntax (call-with-values (lambda () exp) (lambda (new-tmp ...) inner)))))) ((vars exp) (with-syntax ((((new-tmp . new-var) ...) (let lp ((vars (syntax vars))) (syntax-case vars () ((id . rest) (acons (syntax id) (car (generate-temporaries (syntax (id)))) (lp (syntax rest)))) (id (acons (syntax id) (car (generate-temporaries (syntax (id)))) '()))))) ((id ...) ids) ((tmp ...) tmps)) (with-syntax ((inner (lp (cdr clauses) (syntax (new-var ... id ...)) (syntax (new-tmp ... tmp ...)))) (args (let lp ((tmps (syntax (new-tmp ...)))) (syntax-case tmps () ((id) (syntax id)) ((id . rest) (cons (syntax id) (lp (syntax rest)))))))) (syntax (call-with-values (lambda () exp) (lambda args inner))))))))))))) ;;;;;;;;;;;;;; ;; let*-values ;; ;; Current approach is to translate ;; ;; (let*-values (((x y z) (foo a b)) ;; ((p q) (bar c))) ;; (baz x y z p q)) ;; ;; into ;; ;; (call-with-values (lambda () (foo a b)) ;; (lambda (x y z) ;; (call-with-values (lambda (bar c)) ;; (lambda (p q) ;; (baz x y z p q))))) (define-syntax let*-values (syntax-rules () ((let*-values () body ...) (let () body ...)) ((let*-values ((vars-1 binding-1) (vars-2 binding-2) ...) body ...) (call-with-values (lambda () binding-1) (lambda vars-1 (let*-values ((vars-2 binding-2) ...) body ...)))))) ;;; srfi-11.scm ends here