/ / Замініть елементи структури в Ракетці - рекурсія, булева, схема, ракетка

Замінити елементи структури в Racket - рекурсія, логічна, схема, рекет

Скажемо, що у нас є такий вираз (смуга "x (bor" y "z)), де діапазон і bor булеві структури, які мають arg1 і arg2.

Якщо я хочу змінити змінні "x і" y на "a і" b глибокою рекурсією виразу, як я можу це зробити?

Відповіді:

2 для відповіді № 1

Існує спеціальна форма для функціонального оновлення лише деяких полів у структурі, яку дуже приємно використовувати там, де у вас багато полів:

(struct person (name age occupation) #:transparent)
(define p (person "Per" 19 "Painter"))

(define (change-occupation p new-occupation)
(struct-copy person p [occupation new-occupation]))

(change-occupation p "Programmer") ; ==> (person "Per" 19 "Programmer")

Звичайно, це просто химерний спосіб написання:

(define (change-occupation p new-occupation)
(person (person-name p)
(person-age p)
new-occupation))

Тепер я не знаю назв ваших двох структур, але вам може знадобитися зробити загальний аксесуар, якщо один не є підтипом іншого:

(define (change-first obj new-value)
(if (band? obj)
(band new-value (band-second obj))
(bor new-value (bor-arg2 obj))))

Або ви можете просто провести подібний аналіз справи у своїй процедурі.