(define define 1)
В этом примере показано затенение, которое отличается от мутации.
Затенение выделяет новые места в памяти. Он не изменяет существующие.
Конкретно, новые define
затеняют define
от Racket.
Все языки с обозначением локальной области видимости позволяют затенять, например:
> (define x 10)
> (define (f x) ; x shadowed in function f
(displayln x)
(set! x 2) ; (local) x mutated
(displayln x))
> (f 1)
1
2
; local x is out of scope now
> (displayln x) ; original x unmutated
10
Для другого примера
(define num 8)
;(define num 9)
это демонстрирует, что вы не можете затенять что-либо в пределах той же области, что также является стандартным в других языках, например:
> (define (g x x) x) ; cant have two parameters named x