Code Review

Compare your solutions

    #|
  Упражнение 3.15

  Нарисуйте стрелочные диаграммы, объясняющие, как set-to-wow! действует на структуры z1 и z2 из этого
  раздела.
|#

(#%require rackunit)

(define (set-to-wow! x)
  (set-car! (car x) 'wow)
x)

(define x (list 'a 'b))
(define z1 (cons x x))

(define z2 (cons (list 'a 'b) (list 'a 'b)))

(check-true (eq? (car z1) (cdr z1)))
(check-false (eq? (car z2) (cdr z2)))
(check-equal? (set-to-wow! z1) '((wow b) (wow b)))
(check-equal? (set-to-wow! z2) '((wow b) (a b)))

#|
          ┏━━━┳━━━┓   ┏━━━┳━━━┓         ┏━━━┳━━━┓   ┏━━━┳━━━┓
    z1 ──►┃ • ┃ • ╂──►┃ • ┃ ╱ ┃   z2 ──►┃ • ┃ • ╂──►┃ • ┃ ╱ ┃
          ┗━┿━┻━━━┛   ┗━┿━┻━━━┛         ┗━┿━┻━━━┛   ┗━┿━┻━━━┛
            │   ┌───────┘         ┌───────┘           └──┐
            ▼   ▼                 ▼                      ▼
          ┏━━━┳━━━┓   ┏━━━┳━━━┓ ┏━━━┳━━━┓   ┏━━━┳━━━┓  ┏━━━┳━━━┓   ┏━━━┳━━━┓
    x ───►┃ • ┃ • ╂──►┃ • ┃ ╱ ┃ ┃ • ┃ • ╂──►┃ • ┃ ╱ ┃  ┃ • ┃ • ╂──►┃ • ┃ ╱ ┃
          ┗━┿━┻━━━┛   ┗━┿━┻━━━┛ ┗━┿━┻━━━┛   ┗━┿━┻━━━┛  ┗━┿━┻━━━┛   ┗━┿━┻━━━┛
            │           │         │    ┌──────│──────────┘           │
            │           │         ▼    │      ▼                      │
            │           │       ┏━━━┓  │    ┏━━━┓                    │
            └───────────┼──────►┃ a ┃◄─┘ ┌─►┃ b ┃◄───────────────────┘
                        │       ┗━━━┛    │  ┗━━━┛
                        └────────────────┘

  После вызова (set-to-wow! z1) и (set-to-wow! z2):

          ┏━━━┳━━━┓   ┏━━━┳━━━┓         ┏━━━┳━━━┓   ┏━━━┳━━━┓
    z1 ──►┃ • ┃ • ╂──►┃ • ┃ ╱ ┃   z2 ──►┃ • ┃ • ╂──►┃ • ┃ ╱ ┃
          ┗━┿━┻━━━┛   ┗━┿━┻━━━┛         ┗━┿━┻━━━┛   ┗━┿━┻━━━┛
            │   ┌───────┘         ┌───────┘           └──┐
            ▼   ▼                 ▼                      ▼
          ┏━━━┳━━━┓   ┏━━━┳━━━┓ ┏━━━┳━━━┓   ┏━━━┳━━━┓  ┏━━━┳━━━┓   ┏━━━┳━━━┓
    x ───►┃ • ┃ • ╂──►┃ • ┃ ╱ ┃ ┃ • ┃ • ╂──►┃ • ┃ ╱ ┃  ┃ • ┃ • ╂──►┃ • ┃ ╱ ┃
          ┗━┿━┻━━━┛   ┗━┿━┻━━━┛ ┗━┿━┻━━━┛   ┗━┿━┻━━━┛  ┗━┿━┻━━━┛   ┗━┿━┻━━━┛
            │      ┌────│─────────┘    ┌──────│──────────┘           │
            │      │    │              │      ▼                      │
            │      │    │       ┏━━━┓  │    ┏━━━┓                    │
            │      │    │       ┃ a ┃◄─┘ ┌─►┃ b ┃◄───────────────────┘
            ▼      │    │       ┗━━━┛    │  ┗━━━┛
         ┏━━━━━┓   │    └────────────────┘
         ┃ wow ┃◄──┘
         ┗━━━━━┛

  Символ 'wow так же можно разложить на составляющие, но в рамках упражнения это опущено.
|#