#lang racket/base (define-syntax js-let (syntax-rules () ((_ (a b)) (string-append "let " (js1 a) " = " (js1 b) ";\n") ) ) ) (define-syntax js1 (syntax-rules (if let* *) ((_ (if cond body1 body2)) (string-append "if (" (js1 cond) ") then {\n" (js1 body1) "; }\n" "else {\n" (js1 body2) "; }\n" ) ) ((_ (let (a ...))) (string-append (js-let a) ...) ) ((_ a) (format "~a" 'a)) ) ) #| ((_ (if cond body1 body2)) (string-append "if (" (js1 cond) ") then {\n" (js1 body1) " }\n" "else { \n" (js1 body2) " }\n" ) ) ((_ (let ((a b) ...) body)) (string-append "let " (js1 a) " = " (js1 b) ";\n") ... ) ((_ (* a b ...)) (string-append (js1 a) "*" (js1 b) ...)) ((_ a) (format "~a" 'a)) ) ) |# (define-syntax js (syntax-rules () ((_ js-statement ...) (string-append "{ \n" (js1 js-statement) ... "}\n" ) ) ) )