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 так же можно разложить на составляющие, но в рамках упражнения это опущено.
|#