aboutsummaryrefslogtreecommitdiffstats
path: root/srfi-229.sld
diff options
context:
space:
mode:
authorGravatar Peter McGoron 2025-08-02 13:42:12 -0400
committerGravatar Peter McGoron 2025-08-02 13:42:12 -0400
commit6c68eed724a8321f7f0830b4a0d82ce3112b3453 (patch)
tree1b2a9328999c56ef3960b4329e640c098b4950d5 /srfi-229.sld
parentbump version to stable 1.0.0 (diff)
srfi-229 supportHEAD1.1.0master
Diffstat (limited to 'srfi-229.sld')
-rw-r--r--srfi-229.sld38
1 files changed, 38 insertions, 0 deletions
diff --git a/srfi-229.sld b/srfi-229.sld
new file mode 100644
index 0000000..54bbc91
--- /dev/null
+++ b/srfi-229.sld
@@ -0,0 +1,38 @@
+#| Copyright (C) 2025 Peter McGoron
+ |
+ | Permission is hereby granted, free of charge, to any person obtaining a
+ | copy of this software and associated documentation files (the
+ | "Software"), to deal in the Software without restriction, including
+ | without limitation the rights to use, copy, modify, merge, publish,
+ | distribute, sublicense, and/or sell copies of the Software, and to
+ | permit persons to whom the Software is furnished to do so, subject to
+ | the following conditions:
+ |
+ | The above copyright notice and this permission notice (including the
+ | next paragraph) shall be included in all copies or substantial portions
+ | of the Software.
+ |
+ | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
+ | OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+ | MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
+ | IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
+ | CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
+ | TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
+ | SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+ |#
+
+(define-library (srfi 229)
+ (import (scheme base) (srfi 259) (scheme case-lambda))
+ (export lambda/tag case-lambda/tag procedure/tag? procedure-tag)
+ (begin
+ (define-procedure-tag %procedure-tag %procedure/tag? procedure-tag)
+ (define (procedure/tag? proc)
+ (and (procedure? proc) (%procedure/tag? proc)))
+ (define-syntax case-lambda/tag
+ (syntax-rules ()
+ ((_ expression clauses ...)
+ (%procedure-tag expression (case-lambda clauses ...)))))
+ (define-syntax lambda/tag
+ (syntax-rules ()
+ ((_ expression formals body ...)
+ (%procedure-tag expression (lambda formals body ...)))))))