Welcome to the CHICKEN Scheme pasting service

My version of 'let-optional' added by jrapdx 3 days ago

(define-library (let-kw)
  (export let-kw kw/dflt rm-symwd)
  (import scheme.base srfi-1)
  (begin
    
    (define (rm-symwd wd ls)
      (define w+ #f)
      (remove (lambda (el)
                (cond
                 ((equal? wd el) (set! w+ #t) #t)
                 (w+ (set! w+ #f) #t)
                 (else #f))) ls))

    (define-syntax kw/dflt
      (syntax-rules ()
        ((_ dflt kw rest)
         (let ((mem (member kw rest)))
           (cond
            (mem (let ((res (cadr mem)))
                   (set! rest (rm-symwd kw rest))
                   res))
            (else dflt))))
        ((_ dflt rest)
         (if (not (null? rest))
             (let ((res (car rest)))
               (set! rest (cdr rest))
               res)
             dflt))))

    (define-syntax let-kw
      (syntax-rules ()
        ((_ rest ((xkw xvar xval) ...) b0 ...)
         (let ((xvar (kw/dflt xval xkw rest)) ...)
           b0 ...))
        ((_ rest ((xvar xval) ...) b0 ...)
         (let ((xvar (kw/dflt xval rest)) ...)
           b0 ...))))
    ))

;;EXAMPLE
let-kw offers optional (positional) + keyword/symbol params.
Can do both as long as keyword clauses are first in cascade.  
Params not consumed by kw or optional inputs remain in the 'rest' param. Unlike DSSSL keywords are removed from the 'rest' variable--no ambiguity.                     
                                                             
(define (f x . rest)                                         
  (let-kw rest ((y: y 17) (z: z 224))                        
    (let-kw rest ((a 12))                                    
      (printnl x y z a rest))))                              
(f 'abc) -> abc 17 224 12                                    
(f 'cde y: 77 88 'cat 'dog) -> cde 77 224 88 (cat dog)       

Your annotation:

Enter a new annotation:

Your nick:
The title of your paste:
Your paste (mandatory) :
Name of the egg which implements this service:
Visually impaired? Let me spell it for you (wav file) download WAV