mirror of
https://github.com/ashinn/chibi-scheme.git
synced 2025-07-08 05:27:35 +02:00
Deferring execution of defaults.
This commit is contained in:
parent
53cecd82b2
commit
e37011f358
2 changed files with 11 additions and 3 deletions
|
@ -23,6 +23,14 @@
|
|||
(cond ((memq key ls) => cadr)
|
||||
(else (and (pair? o) (car o)))))
|
||||
|
||||
(define-syntax keyword-ref*
|
||||
(syntax-rules ()
|
||||
((keyword-ref* ls key default)
|
||||
(cond ((memq key ls) => cadr) (else default)))))
|
||||
|
||||
(define (symbol->keyword sym)
|
||||
(string->symbol (string-append (symbol->string sym) ":")))
|
||||
|
||||
(define-syntax let-keywords*
|
||||
(syntax-rules ()
|
||||
((let-keywords* opt-ls () . body)
|
||||
|
@ -31,10 +39,10 @@
|
|||
(let ((tmp (op . args)))
|
||||
(let-keywords* tmp vars . body)))
|
||||
((let-keywords* opt-ls ((var default) . rest) . body)
|
||||
(let ((var (keyword-ref opt-ls 'var default)))
|
||||
(let ((var (keyword-ref* opt-ls (symbol->keyword 'var) default)))
|
||||
(let-keywords* opt-ls rest . body)))
|
||||
((let-keywords* opt-ls ((var key default) . rest) . body)
|
||||
(let ((var (keyword-ref opt-ls 'key default)))
|
||||
(let ((var (keyword-ref* opt-ls 'key default)))
|
||||
(let-keywords* opt-ls rest . body)))
|
||||
((let-keywords* opt-ls tail . body)
|
||||
(let ((tail opt-ls)) . body))))
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
|
||||
(define-library (chibi optional)
|
||||
(export let-optionals let-optionals* opt-lambda
|
||||
let-keywords let-keywords* keyword-ref)
|
||||
let-keywords let-keywords* keyword-ref keyword-ref*)
|
||||
(import (chibi))
|
||||
(include "optional.scm"))
|
||||
|
|
Loading…
Add table
Reference in a new issue