Skip to content

Instantly share code, notes, and snippets.

@danking
Created August 17, 2011 15:45
Show Gist options
  • Save danking/1151824 to your computer and use it in GitHub Desktop.
Save danking/1151824 to your computer and use it in GitHub Desktop.
(define-syntax (define-ustruct stx)
(define (make-updater-name struct-name field-name)
(symbol-append struct-name '-update- field-name))
(define (make-updater-proc name-stx field-stx)
(let* ((field-name (syntax->datum field-stx))
(struct-name (syntax->datum name-stx))
(update-proc (datum->syntax name-stx
(make-updater-name struct-name
field-name))))
#`(define (#,update-proc s val)
(struct-copy name s [#,field-stx val]))))
(syntax-case stx ()
((_ name fields)
#`(begin (struct name #,@#'fields)
#,@(syntax-map (lambda (f)
(make-updater-proc #'name f))
#'fields)))))
@danking
Copy link
Author

danking commented Aug 17, 2011

racket@> (require "pda-risc-interpreter.rkt")
pda-risc-interpreter.rkt:30:4: ?: expected cl at: () in: (())
/home/danking/.emacs.d/geiser/scheme/racket/geiser/enter.rkt:88:18: (let-values (((code) get-module-code) ((path7) path) ((temp8) (quote "compiled")) ((compile9) compile) ((temp10) (lambda ....)) ((temp11) (....))) ((checked-procedure-check-and-extract struct:keyword-procedure code keyword-procedure-extract (quote ....)...
/home/danking/.emacs.d/geiser/scheme/racket/geiser/enter.rkt:88:6: (let-values (((code) (let-values (((code) get-module-code) ((....) ....) (....) ....) ((checked-procedure-check-and-extract ....) (....) ....))) ((path) (normal-case-path (simplify-path (....))))) (let-values (((m) (mod1 name ....))) (add-paths! m (reso...


 === context ===
/usr/local/lib/racket/collects/syntax/parse/private/runtime-report.rkt:9:0
/usr/local/lib/racket/collects/errortrace/errortrace-lib.rkt:398:2: errortrace-annotate
/usr/local/lib/racket/collects/errortrace/errortrace-lib.rkt:441:4
/home/danking/.emacs.d/geiser/scheme/racket/geiser/enter.rkt:82:0
standard-module-name-resolver
/usr/local/lib/racket/collects/errortrace/errortrace-lib.rkt:398:2: errortrace-annotate
/usr/local/lib/racket/collects/errortrace/errortrace-lib.rkt:441:4
/usr/local/lib/racket/collects/racket/private/misc.rkt:85:7

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment