Guest User

Untitled

a guest
Jan 21st, 2018
93
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 11.42 KB | None | 0 0
  1. (import (program)
  2. (util)
  3. (printing)
  4. (node-constructors)
  5. (_srfi :1))
  6.  
  7. ;; A sample output:
  8.  
  9. '(elem (url "stairs_a_0Shape1")
  10. (tr 0 0 0 0 -11 0 0 -1 0 0 0 0 17 0 0 0
  11. (elem (url "connect_double_a_0Shape1")
  12. (tr 0 0 0 0 -1 0 0 0 0 0 0 0 0 0 0 0
  13. (elem (url "hang_rungs_end_a_0Shape1")
  14. (tr 0 0 0 0 -1 0 0 0 0 0 0 0 -1 0 0 0
  15. (elem (url "hang_rungs_center_a_0Shape1")
  16. (tr 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
  17. (elem (url "hang_rungs_support_a_01")))))))
  18. (tr 0 0 0 0 0 0 0 0 0 0 0 0 -2 0 0 0
  19. (elem (url "connect_wall_md_0Shape1")))
  20. (tr 0 0 0 0 -1 0 0 0 0 0 0 0 0 0 0 0
  21. (elem (url "connect_wall_sm_0Shape1")))
  22. (tr 0 0 0 0 -1 0 0 0 0 0 0 0 0 0 0 0
  23. (elem (url "connect_wall_md_0Shape1")))
  24. (tr 0 0 0 0 -3 0 0 0 -1 0 0 0 -8 0 0 0
  25. (elem (url "tunnel_a_0Shape1")
  26. (tr 0 0 0 0 0 0 0 0 0 0 0 0 2 0 0 0
  27. (elem (url "tower_a_01")
  28. (tr 0 0 0 0 -1 0 0 -1 0 0 0 0 15 0 0 0
  29. (elem (url "slide_a_0Shape1")))
  30. (tr 0 0 0 0 3 0 0 0 0 0 0 0 7 0 0 0
  31. (elem (url "connect_wall_md_0Shape1")))
  32. (tr 0 0 0 0 2 0 0 0 0 0 0 0 7 0 0 0
  33. (elem (url "connect_wall_md_0Shape1"))))))))))
  34.  
  35. ;; Sampling from the grammar
  36.  
  37. (define (scan f z xs)
  38. (cond [(null? xs) `(,z)]
  39. [else (let* ([res (f z (car xs))])
  40. (cons z (scan f res (cdr xs))))]))
  41.  
  42. (define (scan1 f xs)
  43. (scan f (car xs) (cdr xs)))
  44.  
  45. ;; sampling from a discrete distribution
  46.  
  47. (define (rnd-select pvs)
  48. (cond [(null? pvs) '()]
  49. [else
  50. (letrec* ([smp (uniform-sample 0 1)]
  51. [pvs* (zip (scan1 + (map car pvs)) pvs)]
  52. [iterator (lambda (pvs)
  53. (let* ([pv (car pvs)]
  54. [p (car pv)]
  55. [v (cadr pv)])
  56. (cond [(< smp p) v]
  57. [else (iterator (cdr pvs))])))])
  58. (iterator pvs*))]))
  59.  
  60. (define (mk-choice . vs)
  61. (let* ([p (/ 1.0 (length vs))])
  62. ((cadr (rnd-select (map (lambda (v) (list p v)) vs))))))
  63.  
  64. ;; lazy evaluation; don't want to eagerly evaluate choices because recursion.
  65.  
  66. (define-syntax process-choices
  67. (syntax-rules ()
  68. [(process-choices) '()]
  69. [(process-choices e1 e2 ...) (cons (lambda () e1) (process-choices e2 ...))]
  70. ))
  71.  
  72. ;; we probably want to include parameters later
  73.  
  74. (define-syntax choose
  75. (syntax-rules ()
  76. ((nondet-choice . xs) (apply mk-choice (process-choices . xs)))
  77. ))
  78.  
  79. ;; constructors in the scene graph language
  80.  
  81. (define-constr elem)
  82. (define-constr url)
  83. (define-constr tr)
  84.  
  85. ;; The model
  86.  
  87. (define playground (let ()
  88. (define F123
  89. (lambda ()
  90. (choose
  91. (elem (url "walkway_connect_a_0Shape1")
  92. (tr 0 0 0 0 -19 -1 0 0 0 0 0 0 9 0 0 -1 (F114))
  93. (tr 0 0 0 0 -22 -1 0 0 0 0 0 0 6 0 0 -1 (F97))
  94. (tr 0 0 0 0 -5 0 0 -1 0 0 0 0 17 0 0 0 (F114)))
  95. (elem (url "walkway_connect_a_0Shape1")
  96. (tr 0 0 0 0 -22 -1 0 0 0 0 0 0 3 0 0 -1 (F121))
  97. (tr 0 0 0 0 2 0 0 0 0 0 0 0 0 0 0 0 (F93))
  98. (tr 0 0 0 0 2 0 0 0 0 0 0 0 0 0 0 0 (F114)))
  99. (elem (url "walkway_connect_a_0Shape1")
  100. (tr 0 0 0 0 -19 -1 0 0 0 0 0 0 8 0 0 -1 (F103))
  101. (tr 0 0 0 0 2 0 0 0 0 0 0 0 7 0 0 0 (F100))
  102. (tr 0 0 0 0 -5 0 0 -1 0 0 0 0 17 0 0 0 (F93))
  103. (tr 0 0 0 0 -5 0 0 -1 0 0 0 0 17 0 0 0 (F114)))
  104. (elem (url "walkway_connect_a_0Shape1")
  105. (tr 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 (F122))
  106. (tr 0 0 0 0 3 0 0 0 0 0 0 0 6 0 0 0 (F84))
  107. (tr 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 (F103))
  108. (tr 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 (F122)))
  109. (elem (url "walkway_connect_a_0Shape1")
  110. (tr 0 0 0 0 -5 0 0 -1 0 0 0 0 17 0 0 0 (F114))
  111. (tr 0 0 0 0 3 0 0 0 0 0 0 0 6 0 0 0 (F84))
  112. (tr 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 (F103))
  113. (tr 0 0 0 0 2 0 0 0 0 0 0 0 -2 0 0 0 (F93)))
  114. (elem (url "walkway_connect_a_0Shape1")
  115. (tr 0 0 0 0 -22 -1 0 0 0 0 0 0 6 0 0 -1 (F97))
  116. (tr 0 0 0 0 2 0 0 0 0 0 0 0 0 0 0 0 (F93))
  117. (tr 0 0 0 0 3 0 0 0 0 0 0 0 6 0 0 0 (F84)))
  118. (elem (url "walkway_connect_a_0Shape1")
  119. (tr 0 0 0 0 -8 0 0 -1 0 0 0 0 17 0 0 0 (F95))
  120. (tr 0 0 0 0 3 0 0 0 0 0 0 0 6 0 0 0 (F84))
  121. (tr 0 0 0 0 2 0 0 0 0 0 0 0 0 0 0 0 (F93)))
  122. (elem (url "walkway_connect_a_0Shape1")
  123. (tr 0 0 0 0 2 0 0 0 0 0 0 0 3 0 0 0 (F95))
  124. (tr 0 0 0 0 -1 0 0 0 -1 0 0 0 -2 0 0 0 (F118))
  125. (tr 0 0 0 0 2 0 0 0 0 0 0 0 3 0 0 0 (F97))))))
  126. (define F122
  127. (lambda ()
  128. (choose
  129. (elem (url "stairs_a_0Shape1")
  130. (tr 0 0 0 0 0 0 0 0 -1 0 0 0 -2 0 0 0 (F116)))
  131. (elem (url "stairs_a_0Shape1")
  132. (tr 0 0 0 0 -19 -1 0 0 -1 0 0 0 11 0 0 -1 (F116)))
  133. (elem (url "stairs_a_0Shape1"))
  134. (elem (url "stairs_a_0Shape1")
  135. (tr 0 0 0 0 -12 0 0 -1 0 0 0 0 17 0 0 0 (F120)))
  136. (elem (url "stairs_a_0Shape1")
  137. (tr 0 0 0 0 -11 0 0 -1 0 0 0 0 17 0 0 0 (F120))))))
  138. (define F121
  139. (lambda ()
  140. (choose
  141. (elem (url "hang_rungs_end_a_0Shape1")
  142. (tr 0 0 0 0 -1 0 0 0 0 0 0 0 -1 0 0 0 (F99)))
  143. (elem (url "hang_rungs_end_a_0Shape1")
  144. (tr 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 (F99))))))
  145. (define F120
  146. (lambda ()
  147. (choose
  148. (elem (url "connect_double_a_0Shape1")
  149. (tr 0 0 0 0 -22 -1 0 0 0 0 0 0 1 0 0 -1 (F122))
  150. (tr 0 0 0 0 0 0 0 0 0 0 0 0 -2 0 0 0 (F84))
  151. (tr 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 (F84))
  152. (tr 0 0 0 0 -1 0 0 0 0 0 0 0 -2 0 0 0 (F84))
  153. (tr 0 0 0 0 -8 0 0 -1 0 0 0 0 11 0 0 0 (F114)))
  154. (elem (url "connect_double_a_0Shape1")
  155. (tr 0 0 0 0 -1 0 0 0 0 0 0 0 0 0 0 0 (F121))
  156. (tr 0 0 0 0 0 0 0 0 0 0 0 0 -2 0 0 0 (F84))
  157. (tr 0 0 0 0 -1 0 0 0 0 0 0 0 0 0 0 0 (F100))
  158. (tr 0 0 0 0 -1 0 0 0 0 0 0 0 0 0 0 0 (F84))
  159. (tr 0 0 0 0 -3 0 0 0 -1 0 0 0 -8 0 0 0 (F118))))))
  160. (define F118
  161. (lambda ()
  162. (choose
  163. (elem (url "tunnel_a_0Shape1")
  164. (tr 0 0 0 0 0 0 0 0 0 0 0 0 2 0 0 0 (F116)))
  165. (elem (url "tunnel_a_0Shape1")
  166. (tr 0 0 0 0 0 0 0 0 0 0 0 0 4 0 0 0 (F123)))
  167. (elem (url "tunnel_a_0Shape1")
  168. (tr 0 0 0 0 -15 0 0 0 0 0 0 0 -1 -1 0 0 (F123))))))
  169. (define F116
  170. (lambda ()
  171. (choose
  172. (elem (url "tower_a_01")
  173. (tr 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 (F118))
  174. (tr 0 0 0 0 3 0 0 0 0 0 0 0 7 0 0 0 (F84))
  175. (tr 0 0 0 0 2 0 0 0 0 0 0 0 7 0 0 0 (F84)))
  176. (elem (url "tower_a_01")
  177. (tr 0 0 0 0 -19 0 0 0 0 0 0 0 -4 -1 0 0 (F94))
  178. (tr 0 0 0 0 3 0 0 0 0 0 0 0 7 0 0 0 (F84))
  179. (tr 0 0 0 0 2 0 0 0 0 0 0 0 7 0 0 0 (F84)))
  180. (elem (url "tower_a_01")
  181. (tr 0 0 0 0 -1 0 0 -1 0 0 0 0 15 0 0 0 (F94))
  182. (tr 0 0 0 0 3 0 0 0 0 0 0 0 7 0 0 0 (F84))
  183. (tr 0 0 0 0 2 0 0 0 0 0 0 0 7 0 0 0 (F84))))))
  184. (define F114
  185. (lambda ()
  186. (choose
  187. (elem (url "walkway_a_0Shape1")
  188. (tr 0 0 0 0 -22 -1 0 0 0 0 0 0 9 0 0 -1 (F123)))
  189. (elem (url "walkway_a_0Shape1")
  190. (tr 0 0 0 0 -15 0 0 0 0 0 0 0 -5 -1 0 0 (F123)))
  191. (elem (url "walkway_a_0Shape1")
  192. (tr 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 (F123))))))
  193. (define F103
  194. (lambda ()
  195. (choose
  196. (elem (url "swing_end_a_01")
  197. (tr 0 0 0 0 0 0 0 0 0 0 0 0 -1 0 0 0 (F88)))
  198. (elem (url "swing_end_a_01")
  199. (tr 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 (F88))))))
  200. (define F100
  201. (lambda ()
  202. (choose (elem (url "connect_wall_sm_0Shape1")))))
  203. (define F99
  204. (lambda ()
  205. (choose
  206. (elem (url "hang_rungs_center_a_0Shape1")
  207. (tr 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 (F98))))))
  208. (define F98
  209. (lambda ()
  210. (choose (elem (url "hang_rungs_support_a_01")))))
  211. (define F97
  212. (lambda ()
  213. (choose (elem (url "tunnel_slide_a_0Shape1")))))
  214. (define F95
  215. (lambda () (choose (elem (url "lower_structure_a_01")))))
  216. (define F94
  217. (lambda () (choose (elem (url "slide_a_0Shape1")))))
  218. (define F93
  219. (lambda () (choose (elem (url "connect_rails_a_01")))))
  220. (define F88
  221. (lambda ()
  222. (choose
  223. (elem (url "swing_middle_a_01")
  224. (tr 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 (F87))))))
  225. (define F87
  226. (lambda () (choose (elem (url "swing_support_a_01")))))
  227. (define F84
  228. (lambda ()
  229. (choose (elem (url "connect_wall_md_0Shape1")))))
  230. (lambda () (choose (F122) (F122)))))
  231.  
  232. (pretty-print (playground))
Add Comment
Please, Sign In to add comment