mirror of
https://github.com/ashinn/chibi-scheme.git
synced 2025-07-08 13:37: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)
|
(cond ((memq key ls) => cadr)
|
||||||
(else (and (pair? o) (car o)))))
|
(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*
|
(define-syntax let-keywords*
|
||||||
(syntax-rules ()
|
(syntax-rules ()
|
||||||
((let-keywords* opt-ls () . body)
|
((let-keywords* opt-ls () . body)
|
||||||
|
@ -31,10 +39,10 @@
|
||||||
(let ((tmp (op . args)))
|
(let ((tmp (op . args)))
|
||||||
(let-keywords* tmp vars . body)))
|
(let-keywords* tmp vars . body)))
|
||||||
((let-keywords* opt-ls ((var default) . rest) . 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 rest . body)))
|
||||||
((let-keywords* opt-ls ((var key default) . 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 rest . body)))
|
||||||
((let-keywords* opt-ls tail . body)
|
((let-keywords* opt-ls tail . body)
|
||||||
(let ((tail opt-ls)) . body))))
|
(let ((tail opt-ls)) . body))))
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
|
|
||||||
(define-library (chibi optional)
|
(define-library (chibi optional)
|
||||||
(export let-optionals let-optionals* opt-lambda
|
(export let-optionals let-optionals* opt-lambda
|
||||||
let-keywords let-keywords* keyword-ref)
|
let-keywords let-keywords* keyword-ref keyword-ref*)
|
||||||
(import (chibi))
|
(import (chibi))
|
||||||
(include "optional.scm"))
|
(include "optional.scm"))
|
||||||
|
|
Loading…
Add table
Reference in a new issue