Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- (import (program)
- (util)
- (printing)
- (node-constructors)
- (_srfi :1))
- ;; A sample output:
- '(elem (url "stairs_a_0Shape1")
- (tr 0 0 0 0 -11 0 0 -1 0 0 0 0 17 0 0 0
- (elem (url "connect_double_a_0Shape1")
- (tr 0 0 0 0 -1 0 0 0 0 0 0 0 0 0 0 0
- (elem (url "hang_rungs_end_a_0Shape1")
- (tr 0 0 0 0 -1 0 0 0 0 0 0 0 -1 0 0 0
- (elem (url "hang_rungs_center_a_0Shape1")
- (tr 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
- (elem (url "hang_rungs_support_a_01")))))))
- (tr 0 0 0 0 0 0 0 0 0 0 0 0 -2 0 0 0
- (elem (url "connect_wall_md_0Shape1")))
- (tr 0 0 0 0 -1 0 0 0 0 0 0 0 0 0 0 0
- (elem (url "connect_wall_sm_0Shape1")))
- (tr 0 0 0 0 -1 0 0 0 0 0 0 0 0 0 0 0
- (elem (url "connect_wall_md_0Shape1")))
- (tr 0 0 0 0 -3 0 0 0 -1 0 0 0 -8 0 0 0
- (elem (url "tunnel_a_0Shape1")
- (tr 0 0 0 0 0 0 0 0 0 0 0 0 2 0 0 0
- (elem (url "tower_a_01")
- (tr 0 0 0 0 -1 0 0 -1 0 0 0 0 15 0 0 0
- (elem (url "slide_a_0Shape1")))
- (tr 0 0 0 0 3 0 0 0 0 0 0 0 7 0 0 0
- (elem (url "connect_wall_md_0Shape1")))
- (tr 0 0 0 0 2 0 0 0 0 0 0 0 7 0 0 0
- (elem (url "connect_wall_md_0Shape1"))))))))))
- ;; Sampling from the grammar
- (define (scan f z xs)
- (cond [(null? xs) `(,z)]
- [else (let* ([res (f z (car xs))])
- (cons z (scan f res (cdr xs))))]))
- (define (scan1 f xs)
- (scan f (car xs) (cdr xs)))
- ;; sampling from a discrete distribution
- (define (rnd-select pvs)
- (cond [(null? pvs) '()]
- [else
- (letrec* ([smp (uniform-sample 0 1)]
- [pvs* (zip (scan1 + (map car pvs)) pvs)]
- [iterator (lambda (pvs)
- (let* ([pv (car pvs)]
- [p (car pv)]
- [v (cadr pv)])
- (cond [(< smp p) v]
- [else (iterator (cdr pvs))])))])
- (iterator pvs*))]))
- (define (mk-choice . vs)
- (let* ([p (/ 1.0 (length vs))])
- ((cadr (rnd-select (map (lambda (v) (list p v)) vs))))))
- ;; lazy evaluation; don't want to eagerly evaluate choices because recursion.
- (define-syntax process-choices
- (syntax-rules ()
- [(process-choices) '()]
- [(process-choices e1 e2 ...) (cons (lambda () e1) (process-choices e2 ...))]
- ))
- ;; we probably want to include parameters later
- (define-syntax choose
- (syntax-rules ()
- ((nondet-choice . xs) (apply mk-choice (process-choices . xs)))
- ))
- ;; constructors in the scene graph language
- (define-constr elem)
- (define-constr url)
- (define-constr tr)
- ;; The model
- (define playground (let ()
- (define F123
- (lambda ()
- (choose
- (elem (url "walkway_connect_a_0Shape1")
- (tr 0 0 0 0 -19 -1 0 0 0 0 0 0 9 0 0 -1 (F114))
- (tr 0 0 0 0 -22 -1 0 0 0 0 0 0 6 0 0 -1 (F97))
- (tr 0 0 0 0 -5 0 0 -1 0 0 0 0 17 0 0 0 (F114)))
- (elem (url "walkway_connect_a_0Shape1")
- (tr 0 0 0 0 -22 -1 0 0 0 0 0 0 3 0 0 -1 (F121))
- (tr 0 0 0 0 2 0 0 0 0 0 0 0 0 0 0 0 (F93))
- (tr 0 0 0 0 2 0 0 0 0 0 0 0 0 0 0 0 (F114)))
- (elem (url "walkway_connect_a_0Shape1")
- (tr 0 0 0 0 -19 -1 0 0 0 0 0 0 8 0 0 -1 (F103))
- (tr 0 0 0 0 2 0 0 0 0 0 0 0 7 0 0 0 (F100))
- (tr 0 0 0 0 -5 0 0 -1 0 0 0 0 17 0 0 0 (F93))
- (tr 0 0 0 0 -5 0 0 -1 0 0 0 0 17 0 0 0 (F114)))
- (elem (url "walkway_connect_a_0Shape1")
- (tr 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 (F122))
- (tr 0 0 0 0 3 0 0 0 0 0 0 0 6 0 0 0 (F84))
- (tr 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 (F103))
- (tr 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 (F122)))
- (elem (url "walkway_connect_a_0Shape1")
- (tr 0 0 0 0 -5 0 0 -1 0 0 0 0 17 0 0 0 (F114))
- (tr 0 0 0 0 3 0 0 0 0 0 0 0 6 0 0 0 (F84))
- (tr 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 (F103))
- (tr 0 0 0 0 2 0 0 0 0 0 0 0 -2 0 0 0 (F93)))
- (elem (url "walkway_connect_a_0Shape1")
- (tr 0 0 0 0 -22 -1 0 0 0 0 0 0 6 0 0 -1 (F97))
- (tr 0 0 0 0 2 0 0 0 0 0 0 0 0 0 0 0 (F93))
- (tr 0 0 0 0 3 0 0 0 0 0 0 0 6 0 0 0 (F84)))
- (elem (url "walkway_connect_a_0Shape1")
- (tr 0 0 0 0 -8 0 0 -1 0 0 0 0 17 0 0 0 (F95))
- (tr 0 0 0 0 3 0 0 0 0 0 0 0 6 0 0 0 (F84))
- (tr 0 0 0 0 2 0 0 0 0 0 0 0 0 0 0 0 (F93)))
- (elem (url "walkway_connect_a_0Shape1")
- (tr 0 0 0 0 2 0 0 0 0 0 0 0 3 0 0 0 (F95))
- (tr 0 0 0 0 -1 0 0 0 -1 0 0 0 -2 0 0 0 (F118))
- (tr 0 0 0 0 2 0 0 0 0 0 0 0 3 0 0 0 (F97))))))
- (define F122
- (lambda ()
- (choose
- (elem (url "stairs_a_0Shape1")
- (tr 0 0 0 0 0 0 0 0 -1 0 0 0 -2 0 0 0 (F116)))
- (elem (url "stairs_a_0Shape1")
- (tr 0 0 0 0 -19 -1 0 0 -1 0 0 0 11 0 0 -1 (F116)))
- (elem (url "stairs_a_0Shape1"))
- (elem (url "stairs_a_0Shape1")
- (tr 0 0 0 0 -12 0 0 -1 0 0 0 0 17 0 0 0 (F120)))
- (elem (url "stairs_a_0Shape1")
- (tr 0 0 0 0 -11 0 0 -1 0 0 0 0 17 0 0 0 (F120))))))
- (define F121
- (lambda ()
- (choose
- (elem (url "hang_rungs_end_a_0Shape1")
- (tr 0 0 0 0 -1 0 0 0 0 0 0 0 -1 0 0 0 (F99)))
- (elem (url "hang_rungs_end_a_0Shape1")
- (tr 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 (F99))))))
- (define F120
- (lambda ()
- (choose
- (elem (url "connect_double_a_0Shape1")
- (tr 0 0 0 0 -22 -1 0 0 0 0 0 0 1 0 0 -1 (F122))
- (tr 0 0 0 0 0 0 0 0 0 0 0 0 -2 0 0 0 (F84))
- (tr 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 (F84))
- (tr 0 0 0 0 -1 0 0 0 0 0 0 0 -2 0 0 0 (F84))
- (tr 0 0 0 0 -8 0 0 -1 0 0 0 0 11 0 0 0 (F114)))
- (elem (url "connect_double_a_0Shape1")
- (tr 0 0 0 0 -1 0 0 0 0 0 0 0 0 0 0 0 (F121))
- (tr 0 0 0 0 0 0 0 0 0 0 0 0 -2 0 0 0 (F84))
- (tr 0 0 0 0 -1 0 0 0 0 0 0 0 0 0 0 0 (F100))
- (tr 0 0 0 0 -1 0 0 0 0 0 0 0 0 0 0 0 (F84))
- (tr 0 0 0 0 -3 0 0 0 -1 0 0 0 -8 0 0 0 (F118))))))
- (define F118
- (lambda ()
- (choose
- (elem (url "tunnel_a_0Shape1")
- (tr 0 0 0 0 0 0 0 0 0 0 0 0 2 0 0 0 (F116)))
- (elem (url "tunnel_a_0Shape1")
- (tr 0 0 0 0 0 0 0 0 0 0 0 0 4 0 0 0 (F123)))
- (elem (url "tunnel_a_0Shape1")
- (tr 0 0 0 0 -15 0 0 0 0 0 0 0 -1 -1 0 0 (F123))))))
- (define F116
- (lambda ()
- (choose
- (elem (url "tower_a_01")
- (tr 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 (F118))
- (tr 0 0 0 0 3 0 0 0 0 0 0 0 7 0 0 0 (F84))
- (tr 0 0 0 0 2 0 0 0 0 0 0 0 7 0 0 0 (F84)))
- (elem (url "tower_a_01")
- (tr 0 0 0 0 -19 0 0 0 0 0 0 0 -4 -1 0 0 (F94))
- (tr 0 0 0 0 3 0 0 0 0 0 0 0 7 0 0 0 (F84))
- (tr 0 0 0 0 2 0 0 0 0 0 0 0 7 0 0 0 (F84)))
- (elem (url "tower_a_01")
- (tr 0 0 0 0 -1 0 0 -1 0 0 0 0 15 0 0 0 (F94))
- (tr 0 0 0 0 3 0 0 0 0 0 0 0 7 0 0 0 (F84))
- (tr 0 0 0 0 2 0 0 0 0 0 0 0 7 0 0 0 (F84))))))
- (define F114
- (lambda ()
- (choose
- (elem (url "walkway_a_0Shape1")
- (tr 0 0 0 0 -22 -1 0 0 0 0 0 0 9 0 0 -1 (F123)))
- (elem (url "walkway_a_0Shape1")
- (tr 0 0 0 0 -15 0 0 0 0 0 0 0 -5 -1 0 0 (F123)))
- (elem (url "walkway_a_0Shape1")
- (tr 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 (F123))))))
- (define F103
- (lambda ()
- (choose
- (elem (url "swing_end_a_01")
- (tr 0 0 0 0 0 0 0 0 0 0 0 0 -1 0 0 0 (F88)))
- (elem (url "swing_end_a_01")
- (tr 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 (F88))))))
- (define F100
- (lambda ()
- (choose (elem (url "connect_wall_sm_0Shape1")))))
- (define F99
- (lambda ()
- (choose
- (elem (url "hang_rungs_center_a_0Shape1")
- (tr 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 (F98))))))
- (define F98
- (lambda ()
- (choose (elem (url "hang_rungs_support_a_01")))))
- (define F97
- (lambda ()
- (choose (elem (url "tunnel_slide_a_0Shape1")))))
- (define F95
- (lambda () (choose (elem (url "lower_structure_a_01")))))
- (define F94
- (lambda () (choose (elem (url "slide_a_0Shape1")))))
- (define F93
- (lambda () (choose (elem (url "connect_rails_a_01")))))
- (define F88
- (lambda ()
- (choose
- (elem (url "swing_middle_a_01")
- (tr 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 (F87))))))
- (define F87
- (lambda () (choose (elem (url "swing_support_a_01")))))
- (define F84
- (lambda ()
- (choose (elem (url "connect_wall_md_0Shape1")))))
- (lambda () (choose (F122) (F122)))))
- (pretty-print (playground))
Add Comment
Please, Sign In to add comment