dev-elider-3
Matthew Butterick 9 years ago
parent a2fcd9acc2
commit f8167e1cb7

@ -10,25 +10,30 @@
(car result) (car result)
result))) result)))
(define-syntax format-datum #;(define-syntax format-datum
(λ(stx) (λ(stx)
(syntax-case stx (quote datum) (syntax-case stx (quote datum)
[(_ (quote <datum-template>) <arg> ...) [(_ (quote <datum-template>) <arg> ...)
#'(format-datum (datum <datum-template>) <arg> ...)] #'(format-datum (datum <datum-template>) <arg> ...)]
[(_ (datum datum-template) <arg> ...) [(_ (datum datum-template) <arg> ...)
(syntax-let ([#'format-string (format "~a" (syntax->datum #'datum-template))]) (syntax-let ([#'format-string (format "~a" (syntax->datum #'datum-template))])
#'(string->datum (apply format format-string (map (λ(arg) (if (syntax? arg) #'(string->datum (apply format format-string (map (λ(arg) (if (syntax? arg)
(syntax->datum arg) (syntax->datum arg)
arg)) (list <arg> ...)))))]))) arg)) (list <arg> ...)))))])))
(define (format-datum datum-template . args)
(string->datum (apply format (format "~a" datum-template) (map (λ(arg) (if (syntax? arg)
(syntax->datum arg)
arg)) args))))
(module+ test (module+ test
(require rackunit) (require rackunit syntax/datum)
(check-equal? (string->datum "foo") 'foo) (check-equal? (string->datum "foo") 'foo)
(check-equal? (string->datum "(foo bar)") '(foo bar)) (check-equal? (string->datum "(foo bar)") '(foo bar))
(check-equal? (string->datum "foo bar") '(foo bar)) (check-equal? (string->datum "foo bar") '(foo bar))
(check-equal? (string->datum "42") 42) (check-equal? (string->datum "42") 42)
(check-equal? (format-datum '(~a-bar-~a) "foo" "zam") '(foo-bar-zam)) (check-equal? (format-datum '(~a-bar-~a) "foo" "zam") '(foo-bar-zam))
(check-equal? (format-datum '(~a-bar-~a) #'foo #'zam) '(foo-bar-zam))
(check-equal? (format-datum (datum (~a-bar-~a)) "foo" "zam") '(foo-bar-zam)) (check-equal? (format-datum (datum (~a-bar-~a)) "foo" "zam") '(foo-bar-zam))
(check-equal? (format-datum '~a "foo") 'foo) (check-equal? (format-datum '~a "foo") 'foo)
(check-equal? (format-datum (datum ~a) "foo") 'foo)) (check-equal? (format-datum (datum ~a) "foo") 'foo))

@ -2,5 +2,5 @@
(define collection 'multi) (define collection 'multi)
(define version "0.01") (define version "0.01")
(define deps '("base")) (define deps '("base" "sugar"))
(define build-deps '("racket-doc")) (define build-deps '("racket-doc"))

Loading…
Cancel
Save