;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; ; This module provides the decomposition operations described in SRFI-71, ; "Extended LET-syntax for multiple values" (http://srfi.schemers.org/srfi-71/) ; as originally implemented by Sebastian Egner. It does NOT provide the binding ; forms proposed therein, only the destructuring and conversion procedures. ; ; Specifically, the following definitions are included: ; ; uncons ; uncons-2 ; uncons-3 ; uncons-4 ; uncons-cons ; unlist ; unvector ; values->list ; values->vector ; ; While the following binding forms have been removed: ; ; i:undefined ; srfi-letrec* ; srfi-letrec ; srfi-let* ; srfi-let ; i:let ; i:named-let (module srfi-71 * (import scheme) (define (uncons pair) (values (car pair) (cdr pair))) (define (uncons-2 list) (values (car list) (cadr list) (cddr list))) (define (uncons-3 list) (values (car list) (cadr list) (caddr list) (cdddr list))) (define (uncons-4 list) (values (car list) (cadr list) (caddr list) (cadddr list) (cddddr list))) (define (uncons-cons alist) (values (caar alist) (cdar alist) (cdr alist))) (define (unlist list) (apply values list)) (define (unvector vector) (apply values (vector->list vector))) (define-syntax values->list (syntax-rules () ((values->list x) (call-with-values (lambda () x) list)))) (define-syntax values->vector (syntax-rules () ((values->vector x) (call-with-values (lambda () x) vector)))))