PasteRack.org | ||
Paste # 43101 | ||
2018-04-16 18:05:22 | ||
Forked from paste # 99121. | ||
Fork as a new paste. | ||
Paste viewed 745 times. | ||
Tweet | ||
Embed: | ||
#lang racket (require (for-syntax syntax/parse racket/list syntax/transformer)) (begin-for-syntax (struct communicate (transformer value) #:property prop:procedure (struct-field-index transformer)) (define-syntax (access stx) (syntax-parse stx [(_ x:id) #:fail-unless (communicate? (syntax-local-value #'x)) (format "Expected ~a to be bound by my-let" (syntax-e #'x)) #'(cons x '#,(communicate-value (syntax-local-value #'x)))])) (define-syntax (my-let stx) (syntax-parse stx [(_ ([x:id e:expr] ...) body:expr) #'(let-syntax ([x (communicate (make-variable-like-transformer #'e) (length (flatten (syntax->datum #'e))))] ...) body)])) (my-let ([x '(a . (b . (((c . d) . 4) . 5)))]) (access x))
=>
prog:4:0: read: expected a `)' to close `(' possible cause: indentation suggests a missing `)' before line 8 context...: /home/pasterack/racket68/collects/syntax/module-reader.rkt:186:17: body /home/pasterack/racket68/collects/syntax/module-reader.rkt:183:2: wrap-internal /home/pasterack/racket68/collects/racket/../syntax/module-reader.rkt:65:9: lang:read-syntax /home/pasterack/racket68/share/pkgs/scribble-lib/scribble/private/manual-code.rkt:112:0: get-tokens /home/pasterack/racket68/share/pkgs/scribble-lib/scribble/private/manual-code.rkt:56:0: typeset-code15 /home/pasterack/pasterack/tmp/43101/43101code.scrbl: [running body] loop ...cket/cmdline.rkt:179:51 /home/pasterack/racket68/share/pkgs/scribble-lib/scribble/run.rkt: [running body]