Skip to content

Instantly share code, notes, and snippets.

View soegaard's full-sized avatar

Jens Axel Søgaard soegaard

View GitHub Profile
@soegaard
soegaard / gist:5791883
Created June 16, 2013 12:21
Eval example
#lang racket
(define ns (make-base-namespace))
(define port (open-input-string "(define x 41) (+ x 1)"))
(for ([expr (in-port read port)])
(displayln (eval expr ns)))
#lang racket
(define-syntax c
(make-set!-transformer
(lambda (stx)
(syntax-case stx (set!)
[(set! id v) #'(error 'set! "c is immutable")]
[id (identifier? #'id) #'42]))))
c
(set! c 43)
#lang racket
(module+ constants (provide c) (define c 42))
(require (submod "." constants)) ; incorrect!
c
(set! c (+ c 1))
#lang racket
(module constants racket
(provide e pi)
(define e 2.1718281828)
(define pi (* 355/113 1.0)))
(require 'constants)
pi
; (set! pi (+ pi 1))
@soegaard
soegaard / voila.rkt
Created July 31, 2013 17:15
Replacing the constructor of a struct
#lang racket
(struct foo: (x y)
#:reflection-name 'foo
#:transparent)
(define (make-foo x y)
(match* (x y)
[((? number?) (? number?)) (foo: x y)]
[(_ _) (error 'foo/test "elements must be numbers")]))
@soegaard
soegaard / colors.rkt
Created August 8, 2013 18:09
Match expanders and color% objects
#lang racket
(require racket/draw (for-syntax syntax/parse) pict unstable/gui/pict)
(define-syntax defv (make-rename-transformer #'define-values))
(define-syntax defm (make-rename-transformer #'match-define))
(define-syntax def (make-rename-transformer #'define))
(define-match-expander color:
(λ (stx)
(syntax-parse stx
#lang racket
(require racket/draw)
(define bm (make-object bitmap% 400 400))
(define dc (new bitmap-dc% [bitmap bm]))
(define p (new dc-path%))
(send p move-to 300 200)
(send p arc 100 100 200 200 0 (* 2 pi))
(send p line-to 400 200)
(define-syntax (myapply stx)
(define (is-underscore? x) (equal? '_ (syntax->datum x)))
(syntax-case stx ()
[(_ fun . args)
(let* ([missing-ids (dar (filter is-underscore? (syntax->list #'args)))]
[new-ids (dar (take (length missing-ids) (generate-temporaries #'args)))]
[new-args (dar (replace-if is-underscore? (syntax->list #'args) new-ids))])
(with-syntax ([(new-arg ...) new-args]
[(new-id ...) new-ids])
#'(lambda (new-id ...) (fun new-arg ...))))]))
@soegaard
soegaard / big?.rkt
Created January 30, 2014 18:44
Is this a bug?
raco setup: --- installing collections ---
raco setup: --- post-installing collections ---
raco setup: post-installing: <pkgs>/gui-lib/mred
raco setup: post-installing: <pkgs>/gui-lib/racket/gui
raco setup: post-installing: <pkgs>/mzcom
raco setup: post-installing: <pkgs>/mzscheme-lib/mzscheme
raco setup: post-installing: <pkgs>/racket-doc/help
raco setup: --- checking package dependencies ---
raco setup: package declares no dependencies: "abnf"
raco setup: package declares no dependencies: "set"
#lang racket
(require syntax/parse)
(define-syntax-class term
(pattern ((~literal t) t)))
(define-syntax-class operator
(pattern ((~literal o) op)))
(define-splicing-syntax-class term-op