#lang racket/base (require racket/promise (for-syntax racket/base)) (provide define-on-demand) (define-syntax-rule (define-on-demand id rhs) (begin (define define-on-demand-bound-promise (delay rhs)) (define-syntax (id stx) (if (identifier? stx) #'(force define-on-demand-bound-promise) (raise-syntax-error #f "bad syntax" stx)))))