Skip to content

Instantly share code, notes, and snippets.

@jbclements
Created November 22, 2013 18:55
Show Gist options
  • Save jbclements/7604996 to your computer and use it in GitHub Desktop.
Save jbclements/7604996 to your computer and use it in GitHub Desktop.
turning structures into lists
(require racket/list)
;; a world is (make-world component component component component
;; component component component component
;; component component component component
;; component component component component)
(define-struct world (c1 c2 c3 c4 c5 c6 c7 c8 c9 c10 c11 c12 c13 c14 c15 c16))
;; change the c1 field of a world to the new value
;; world any -> world
(define (update-c1 w new-val)
(make-world new-val
(world-c2 world)
(world-c3 world)
(world-c4 world)
(world-c5 world)
(world-c6 world)
(world-c7 world)
(world-c8 world)
(world-c9 world)
(world-c10 world)
(world-c11 world)
(world-c12 world)
(world-c13 world)
(world-c14 world)
(world-c15 world)
(world-c16 world)))
;; change the c2 field of a world to the new value
;; world any -> world
(define (update-c2 w new-val)
(make-world (world-c1 world)
new-val
(world-c3 world)
(world-c4 world)
(world-c5 world)
(world-c6 world)
(world-c7 world)
(world-c8 world)
(world-c9 world)
(world-c10 world)
(world-c11 world)
(world-c12 world)
(world-c13 world)
(world-c14 world)
(world-c15 world)
(world-c16 world)))
;; change the c3 field of a world to the new value
;; world any -> world
(define (update-c3 w new-val)
(make-world (world-c1 world)
(world-c2 world)
new-val
(world-c4 world)
(world-c5 world)
(world-c6 world)
(world-c7 world)
(world-c8 world)
(world-c9 world)
(world-c10 world)
(world-c11 world)
(world-c12 world)
(world-c13 world)
(world-c14 world)
(world-c15 world)
(world-c16 world)))
;; change the c4 field of a world to the new value
;; world any -> world
(define (update-c4 w new-val)
(make-world (world-c1 world)
(world-c2 world)
(world-c3 world)
new-val
(world-c5 world)
(world-c6 world)
(world-c7 world)
(world-c8 world)
(world-c9 world)
(world-c10 world)
(world-c11 world)
(world-c12 world)
(world-c13 world)
(world-c14 world)
(world-c15 world)
(world-c16 world)))
;; change the c5 field of a world to the new value
;; world any -> world
(define (update-c5 w new-val)
(make-world (world-c1 world)
(world-c2 world)
(world-c3 world)
(world-c4 world)
new-val
(world-c6 world)
(world-c7 world)
(world-c8 world)
(world-c9 world)
(world-c10 world)
(world-c11 world)
(world-c12 world)
(world-c13 world)
(world-c14 world)
(world-c15 world)
(world-c16 world)))
;; change the c6 field of a world to the new value
;; world any -> world
(define (update-c6 w new-val)
(make-world (world-c1 world)
(world-c2 world)
(world-c3 world)
(world-c4 world)
(world-c5 world)
new-val
(world-c7 world)
(world-c8 world)
(world-c9 world)
(world-c10 world)
(world-c11 world)
(world-c12 world)
(world-c13 world)
(world-c14 world)
(world-c15 world)
(world-c16 world)))
;; change the c7 field of a world to the new value
;; world any -> world
(define (update-c7 w new-val)
(make-world (world-c1 world)
(world-c2 world)
(world-c3 world)
(world-c4 world)
(world-c5 world)
(world-c6 world)
new-val
(world-c8 world)
(world-c9 world)
(world-c10 world)
(world-c11 world)
(world-c12 world)
(world-c13 world)
(world-c14 world)
(world-c15 world)
(world-c16 world)))
;; change the c8 field of a world to the new value
;; world any -> world
(define (update-c8 w new-val)
(make-world (world-c1 world)
(world-c2 world)
(world-c3 world)
(world-c4 world)
(world-c5 world)
(world-c6 world)
(world-c7 world)
new-val
(world-c9 world)
(world-c10 world)
(world-c11 world)
(world-c12 world)
(world-c13 world)
(world-c14 world)
(world-c15 world)
(world-c16 world)))
;; change the c9 field of a world to the new value
;; world any -> world
(define (update-c9 w new-val)
(make-world (world-c1 world)
(world-c2 world)
(world-c3 world)
(world-c4 world)
(world-c5 world)
(world-c6 world)
(world-c7 world)
(world-c8 world)
new-val
(world-c10 world)
(world-c11 world)
(world-c12 world)
(world-c13 world)
(world-c14 world)
(world-c15 world)
(world-c16 world)))
;; change the c10 field of a world to the new value
;; world any -> world
(define (update-c10 w new-val)
(make-world (world-c1 world)
(world-c2 world)
(world-c3 world)
(world-c4 world)
(world-c5 world)
(world-c6 world)
(world-c7 world)
(world-c8 world)
(world-c9 world)
new-val
(world-c11 world)
(world-c12 world)
(world-c13 world)
(world-c14 world)
(world-c15 world)
(world-c16 world)))
;; change the c11 field of a world to the new value
;; world any -> world
(define (update-c11 w new-val)
(make-world (world-c1 world)
(world-c2 world)
(world-c3 world)
(world-c4 world)
(world-c5 world)
(world-c6 world)
(world-c7 world)
(world-c8 world)
(world-c9 world)
(world-c10 world)
new-val
(world-c12 world)
(world-c13 world)
(world-c14 world)
(world-c15 world)
(world-c16 world)))
;; change the c12 field of a world to the new value
;; world any -> world
(define (update-c12 w new-val)
(make-world (world-c1 world)
(world-c2 world)
(world-c3 world)
(world-c4 world)
(world-c5 world)
(world-c6 world)
(world-c7 world)
(world-c8 world)
(world-c9 world)
(world-c10 world)
(world-c11 world)
new-val
(world-c13 world)
(world-c14 world)
(world-c15 world)
(world-c16 world)))
;; change the c13 field of a world to the new value
;; world any -> world
(define (update-c13 w new-val)
(make-world (world-c1 world)
(world-c2 world)
(world-c3 world)
(world-c4 world)
(world-c5 world)
(world-c6 world)
(world-c7 world)
(world-c8 world)
(world-c9 world)
(world-c10 world)
(world-c11 world)
(world-c12 world)
new-val
(world-c14 world)
(world-c15 world)
(world-c16 world)))
;; change the c14 field of a world to the new value
;; world any -> world
(define (update-c14 w new-val)
(make-world (world-c1 world)
(world-c2 world)
(world-c3 world)
(world-c4 world)
(world-c5 world)
(world-c6 world)
(world-c7 world)
(world-c8 world)
(world-c9 world)
(world-c10 world)
(world-c11 world)
(world-c12 world)
(world-c13 world)
new-val
(world-c15 world)
(world-c16 world)))
;; change the c15 field of a world to the new value
;; world any -> world
(define (update-c15 w new-val)
(make-world (world-c1 world)
(world-c2 world)
(world-c3 world)
(world-c4 world)
(world-c5 world)
(world-c6 world)
(world-c7 world)
(world-c8 world)
(world-c9 world)
(world-c10 world)
(world-c11 world)
(world-c12 world)
(world-c13 world)
(world-c14 world)
new-val
(world-c16 world)))
;; change the c16 field of a world to the new value
;; world any -> world
(define (update-c16 w new-val)
(make-world (world-c1 world)
(world-c2 world)
(world-c3 world)
(world-c4 world)
(world-c5 world)
(world-c6 world)
(world-c7 world)
(world-c8 world)
(world-c9 world)
(world-c10 world)
(world-c11 world)
(world-c12 world)
(world-c13 world)
(world-c14 world)
(world-c15 world)
new-val))
;;; **** OR ****
;; a component-set is
;; (list component component component component
;; component component component component
;; component component component component
;; component component component component)
;; a world is (make-world component-set)
(define-struct world2 (loc))
;; update the 'n'th component with the new value
;; world number any -> world
(define (update-component w n new-val)
(make-world2
(append (take (world2-loc w) n)
(list new-val)
(drop (world2-loc w) (add1 n)))))
(check-expect (update-component (make-world2 (list 10 9 8 7 6 5 4 3 2 1 0 -1 -2 -3 -4 -5)) 3 999)
(make-world2 (list 10 9 8 999 6 5 4 3 2 1 0 -1 -2 -3 -4 -5)))
;; get the 'n'th component of a world
;; world number -> any
(define (get-component w n)
(list-ref (world2-loc w) n))
(check-expect (get-component (make-world2 (list 10 9 8 7 6 5 4 3 2 1 0 -1 -2 -3 -4 -5)) 3)
7)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment