diff options
Diffstat (limited to 'prescheme-nim-local/lib/ps-utils.scm')
-rw-r--r-- | prescheme-nim-local/lib/ps-utils.scm | 32 |
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)) |