;; This module contains code to define named composite words. (module composite mzscheme (require "ns.ss") (provide compositions) ;; The 'compositions' macro is the entry point to the expansion and ;; registration code. It takes a destination namespace and either an ;; anonymous function compiler as an argument. (define-syntax compositions (syntax-rules () ((_ dst-ns fn: def ...) (begin (composition dst-ns fn: def) ...)))) (define-syntax composition (syntax-rules (local) ((_ dst-ns fn: (local ((name . body) ...) (global-defs ...))) (letrec ((name (fn: . body)) ...) (compositions dst-ns fn: global-defs ...))) ((_ (ns ...) fn: (name . body)) (ns-set! '(ns ... name) (fn: . body))))) )