# [racket] Compile-time evaluation

On 2013-07-29 06:25:21 +0400, Roman Klochkov wrote:
>* Is there simple way to calculate during compilation. Something like #.
*>* in Common Lisp.
*
Can you tell us what #. means in Common Lisp?
I am guessing that you want to do something like the following:
#lang racket
(require (for-syntax syntax/parse))
;; functions to compute costly constants
;; at compile-time
(begin-for-syntax
(define (compute-x) ...)
(define (compute-y) ...)
(define (compute-z) ...))
;; macro that defines x, y, z assuming
;; suitable definitions of compute-x, etc.
(define-syntax (define-constants stx)
(syntax-parse stx
[(_ x:id y:id z:id)
#`(begin (define x #,(compute-x))
(define y #,(compute-y))
(define z #,(compute-z)))]))
(define-constants my-x my-y my-z)
This will work if the `compute-` functions produce flat data that can be
embedded in syntax, like numbers.
Cheers,
Asumu