From fd714598394a36d94846a5c2cfa1dc6a7e4bcced Mon Sep 17 00:00:00 2001 From: Pjotr Prins Date: Tue, 11 Feb 2025 02:24:30 -0600 Subject: Add FOSDEM 2025 talk --- prescheme-nim-local/lib/ps-utils.scm | 32 ++++++++++++++++++++++++++++++++ 1 file changed, 32 insertions(+) create mode 100644 prescheme-nim-local/lib/ps-utils.scm (limited to 'prescheme-nim-local/lib/ps-utils.scm') 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)) -- cgit v1.2.3