#lang racket/base (require (for-syntax racket/base)) (require racket/syntax) (provide define->macro) (define-syntax define->macro (syntax-rules () [(_ (proc-name arg ... . rest-arg) proc-expr ...) (define->macro proc-name (λ(arg ... . rest-arg) proc-expr ...))] [(_ proc-name proc) (define-syntax proc-name (syntax-id-rules () [(proc-name expr (... ...)) (proc expr (... ...))] [proc-name proc]))])) ;(define foo (λ(x) (add1 x))) ;(define->macro foo (λ(x) (add1 x))) ;(foo 4) ;(map foo '(2 4 6)) ;(define (bar x) (add1 x)) ;(define->macro (bar x y) (+ x y)) ;(bar 4 1) ;(map bar '(2 4 6) '(2 4 6)) ;(define-syntax zam (add1 x)) ;(zam 4) ;(map zam '(2 4 6))