;;;;;;; Side effects (aka immorality) in Scheme ;; Output using display and newline ;; (two equivalent ways) (define print (lambda (lst) (if (null? lst) 'done ; The first way: use begin (begin (display (car lst)) (newline) (print (cdr lst)))))) (define print (lambda (lst) (if (null? lst) 'done ; The second way: use let (let ((garbage (display (car lst)))) (let ((garbage2 (newline))) (print (cdr lst))))))) ;; Mutating variables using set!, set-car!, and set-cdr! (let ((lst (cons 10 (cons 20 (cons 30 '()))))) (begin (set! lst '()) lst)) (let ((list1 (cons 10 (cons 20 (cons 30 '()))))) (let ((list2 list1)) (begin (set-car! list1 'apple) list2))) (let ((list1 (cons 10 (cons 20 (cons 30 '()))))) (let ((list2 list1)) (begin (set-cdr! list1 '()) list2)))