aboutsummaryrefslogtreecommitdiff
path: root/prescheme-nim-local/lib/ps-utils.scm
diff options
context:
space:
mode:
Diffstat (limited to 'prescheme-nim-local/lib/ps-utils.scm')
-rw-r--r--prescheme-nim-local/lib/ps-utils.scm32
1 files changed, 32 insertions, 0 deletions
diff --git a/prescheme-nim-local/lib/ps-utils.scm b/prescheme-nim-local/lib/ps-utils.scm
new file mode 100644
index 0000000..574bb04
--- /dev/null
+++ b/prescheme-nim-local/lib/ps-utils.scm
@@ -0,0 +1,32 @@
+;;; ps-utils --- Utilities for Pre-Scheme
+
+(define-syntax when
+ (syntax-rules ()
+ ((_ condition consequent ...)
+ (if condition
+ (begin consequent ...)))))
+
+(define-syntax unless
+ (syntax-rules ()
+ ((_ condition antecedent ...)
+ (if (not condition)
+ (begin antecedent ...)))))
+
+(define-syntax define-wrapper-type
+ (lambda (exp rename compare)
+ (define (symbol-append . args)
+ (string->symbol
+ (apply string-append (map (lambda (s)
+ (if (string? s) s (symbol->string s)))
+ args))))
+ (let* ((name (cadr exp))
+ (type-id (symbol-append ":" name))
+ (constructor (rename (symbol-append "make-" name)))
+ (%begin (rename 'begin))
+ (%define-record-type (rename 'define-record-type))
+ (%define-external (rename 'define-external)))
+ `(,%define-record-type ,name ,type-id
+ (,constructor)))))
+
+(define (zero? n) (= n 0))
+(define (one? n) (= n 1))