> (set! a 5) [image] [image] set!: assignment disallowed; cannot set variable before its definition variable: a > (define a 5) > a 5 > (set! a 10) > a 10 > (define a 5) > (define a 10) > a 10 > (define a 20) > a 20 > (define p (cons 2 3)) > p (2 . 3) > (set-car! p 5) > p (5 . 3) > (set-cdr! p 8) > p (5 . 8) > p (5 . 8) > (set! (+ 2 3) 8) [image] set!: not an identifier in: (+ 2 3) > (set-car! (cons 2 3) 8) > (begin (+ 2 3) (- 4 5) (* 7 8)) 56 > (begin (+ 2 3) (/ 4 0) (* 7 8)) [image] [image] /: division by zero > (begin (set! a 10) (+ a 20)) 30 > a 10 > (define (my-begin . l) (last l)) > (my-begin (set! a 30) (+ a 20)) [image] [image] last: undefined; cannot reference an identifier before its definition > (define (last l) (car (reverse l))) > (my-begin (set! a 30) (+ a 20)) 50 > (my-begin (set! a 70) (+ a 20)) 90 > begin [image] begin: bad syntax in: begin > (my-begin) [image] [image] mcar: contract violation expected: mpair? given: () > (begin) > (define (my-begin . l) (if (not (null? l)) (last l))) > (my-begin) > (begin) > (let ((x 2)) (+ x (let ((x 3)) (+ x (let ((x 4)) (set! x 5) x))))) 10 > (let ((x 2)) (+ x (let ((x 3)) (+ x (let ((y 4)) (set! x 5) y))))) 9 > (let ((x 2)) (+ x (let ((x 3)) (+ x (let ((y 4)) (+ x y)))))) 12 > (let ((x 2)) (+ x (let ((x 3)) (+ x (let ((y 4)) (set! x 5) (+ x y)))))) 14 > (let ((x 2)) (+ x (let ((x 3)) (+ x (let ((y 4)) (begin (set! x 5) (+ x y))))))) 14 > p (5 . 8) > (set-cdr! p (cons 13 21)) > p (5 13 . 21) > (set-cdr! p (cons 13 '())) > p (5 13) > (set-car! (cdr p) 8) > p (5 8) > (set-cdr! (cdr p) p) > p #0=(5 8 . #0#) > (reverse p) [image] Interactions disabled > (define p (list 5 8))