smoltutor

1. scope1::warmup_defvar

(defvar x 1)
(defvar y (+ x 2))
x
y

2. scope1::warmup_error

(defvar xyz 173)
abc

3. scope1::warmup_fun

(deffun (sum x y z)
  (+ x (+ y z)))
(sum 2 1 3)

4. scope1::local_def_is_possible

(deffun (addy x)
  (defvar y 1)
  (+ x y))
(addy 2)

5. scope1::refer_global_is_possible

(defvar y 1)
(deffun (addy x)
  (+ x y))
(addy 2)

6. scope1::defs_are_recursive

(deffun (addy x)
  (+ x y))
(defvar y 1)
(addy 2)

7. scope1::shadow_or_overwrite

(defvar y 100)
(deffun (addy x)
  (defvar y 200)
  (+ x y))
(addy 2)

8. scope1::shadow_rather_than_overwrite

(defvar y 100)
(deffun (addy x)
  (defvar y 200)
  (+ x y))
(+ (addy 2) y)

9. scope1::error_when_refer_to_undefined

(deffun (addy x)
  (defvar y 200)
  (+ x y))
(+ (addy 2) y)

10. scope1::what_is_x_1

(defvar x 1)
(deffun (main)
  (defvar x 2)
  (deffun (get-x) x)
  (get-x))

(main)

11. scope1::what_is_x_2

(defvar x 1)
(deffun (get-x) x)

(deffun (main)
  (defvar x 2)
  (get-x))
(main)

12. scope1::what_is_x_3

(defvar x 1)
(deffun (main)
  (defvar x 2)
  (get-x))
(deffun (get-x) x)

(main)

13. scope1::what_is_x_4

(defvar x 1)
(deffun (main)
  (deffun (get-x) x)
  (defvar x 2)
  (get-x))

(main)

14. scope1::define_twice_global

(defvar x 1)
(defvar x 2)
x

15. scope1::define_twice_arg

(deffun (f x x)
  (+ x x))
(f 1 2)

16. scope2::warmup_error

(/ 1 0)

17. scope2::defvar_binding_cause_evaluation

(defvar x (/ 1 0))
42

18. scope2::funcall_binding_cause_evaluation

(deffun (f x)
  42)
(f (/ 1 0))

19. scope2::good_order

(defvar x 1)
(defvar y (+ x 2))
x
y

20. scope2::bad_order

(defvar y (+ x 2))
(defvar x 1)
x
y

21. scope2::order_and_funcall_warmup

(deffun (getx)
  x)
(defvar x 12)
(defvar y (getx))
y

22. scope2::order_and_funcall_1

(deffun (getx)
  x)
(defvar y (getx))
(defvar x 12)
y

23. scope2::order_and_funcall_2

(defvar x 2)
(deffun (main)
  (deffun (getx)
    x)
  (defvar y (getx))
  (defvar x 3)
  y)

(main)

24. mut-vars1::scope_review_1

(defvar x 0)
(defvar y x)
(defvar x 2)
x
y

25. mut-vars1::scope_review_2

(deffun (foo)
  y)
(defvar y 1)
(foo)

26. mut-vars1::scope_review_3

(defvar x 1)
(deffun (gety)
  (defvar y x)
  (defvar x 2)
  y)
(gety)

27. mut-vars2::warmup_setbang

(defvar rent 100)
(set! rent (* 100 2))
rent

28. mut-vars2::update_undefined

(set! foobar 2)
foobar

29. mut-vars2::not_aliased_by_defvar_1

(defvar x 12)
(defvar y x)
(set! x 0)
x
y

30. mut-vars2::not_aliased_by_defvar_2

(defvar m 40)
(defvar n m)
(set! n 22)
m
n

31. mut-vars2::not_aliased_by_defvar_3

(defvar x 1)
(defvar y (+ x 100))
(set! x 2)
x
y

32. mut-vars2::remote_update_possible

(defvar x 12)
(deffun (f)
  (set! x 0))
(f)
x

33. mut-vars2::not_aliased_by_funarg_1

(defvar x 12)
(deffun (f x)
  (set! x 0))
(f x)
x

34. mut-vars2::funs_remember_vars_not_vals

(defvar x 1)
(deffun (getx)
  x)
(deffun (setx new-val)
  (set! x new-val))
(getx)
(setx 2)
(getx)

35. mut-vars2::not_aliased_by_funarg_2

(defvar x 12)
(deffun (set-and-return y)
  (set! y 0)
  x)
(set-and-return x)

36. mut-vars2::not_aliased_by_funarg_3

(defvar x 12)
(deffun (set-and-return y)
  (set! x 0)
  y)
(set-and-return x)
x

37. vectors1::warmup_mvec

(defvar n 3)
(deffun (f x)
  (+ x 1))
(mvec n (f n))

38. vectors1::vec_hetero

(mvec (mvec 1 2) 3)

39. vectors1::vec_print

(mvec (mvec 123) (mvec 4 5))

40. vectors1::warmup_veclen

(defvar v (mvec 1 2 3 4))
(vec-len v)

41. vectors1::veclen_nested

(vec-len (mvec 4 (mvec 5 6)))

42. vectors1::warmup_vecref

(defvar v (mvec (mvec 10 20) (mvec 30 40)))
(vec-ref (vec-ref v 1) 0)

43. vectors1::warmup_vecset_1

(defvar x (mvec 2 3))
(vec-set! x 0 100)
x

44. vectors1::warmup_vecset_2

(defvar x (mvec 2))
(vec-set! x 0 100)
x

45. vectors1::mpairs_are_mvec

(defvar mv (mvec 4 5))
(left mv)

46. vectors1::vector_not_flatten

(defvar m (mvec 1 2))
(vec-set! m 1 (mvec 3 4))
(vec-ref m 2)

47. vectors2::alias_with_defvar

(defvar x (mvec 100))
(defvar y x)
(vec-set! x 0 200)
y

48.

vectors2::alias_with_funcall

(defvar x (mvec 1 0))
(deffun (f y)
  (vec-set! y 0 173))
(f x)
x

49. vectors2::alias_var_in_mvec

(defvar x 3)
(defvar v (mvec 1 2 x))
(set! x 4)
v

50. vectors2::alias_mvec_in_mvec

(defvar x (mvec 3))
(defvar v (mvec 1 2 x))
(vec-set! x 0 4)
v

51. vectors2::alias_mvec_in_mvec_trick

(defvar x (mvec 3))
(defvar v (mvec 1 2 x))
(set! x 4)
v

52. vectors2::alias_mvec_in_mpair

(defvar v (mvec 1 2 3))
(defvar vv (mpair v v))
(vec-set! (right vv) 0 100)
(left vv)

53. vectors2::warmup_circularity

(defvar x (mvec 1 0 2))
(vec-set! x 1 x)
(vec-len x)

54. vectors2::circularity_and_alias

(defvar v (mpair 10 7))
(set-left! v v)
(set-right! v 42)
(right (left (left v)))

55. lambda1::smol_quiz_var_as_arg

(defvar x 12)
(deffun (f x)
  (set! x 0))
(f x)
x

56. lambda1::smol_quiz_seemingly_alias_a_var

(defvar x 5)
(deffun (set1 x y)
  (set! x y))
(deffun (set2 a y)
  (set! x y))
(set1 x 6)
x
(set2 x 7)
x

57. lambda1::smol_quiz_aliasing_mvec_in_mvec

(defvar x (mvec 1 7 3))
(defvar pr (mpair x x))
(vec-set! (right pr) 0 100)
pr

58. lambda1::smol_quiz_circularity

(defvar x (mvec 2 3))
(set-right! x x)
(set-left! x x)
x

59. lambda1::warmup_hof

(deffun (get) 42)
(defvar f get)
(defvar g f)
(g)

60. lambda1::fun_as_parameter

(deffun (twice f x)
  (f (f x)))
(deffun (double x)
  (+ x x))
(twice double 1)

61. lambda1::fun_as_output

(deffun (add1 x) (+ x 1))
(deffun (g) add1)
(defvar f (g))
(f 100)

62. lambda1::fun_in_vectors

(deffun (add1 n)
  (+ n 1))
(defvar v (mvec add1))
((vec-ref v 0) 2)

63. lambda2::read_local1

(deffun (make-getter)
  (defvar x 1)
  (deffun (get-x) x)
  get-x)
(defvar get-x (make-getter))
(get-x)

64. lambda2::read_local2

(deffun (make-getter x)
  (deffun (get-x) x)
  get-x)
(defvar get-a (make-getter 1))
(defvar get-b (make-getter 2))
(get-a)
(get-b)

65. lambda2::fun_ref_env

(deffun (make-addy y)
  (deffun (addy x)
    (+ x y))
  addy)
(defvar f (make-addy 10))
(defvar g (make-addy 50))
(f 2)
(g 2)

66. lambda2::state

(defvar x 1)
(deffun (make-f)
  (deffun (addx y)
    (+ x y))
  addx)
(defvar f (make-f))
(set! x 2)
(f x)

67. lambda2::counter

(deffun (make-counter count)
  (deffun (counter)
    (set! count (+ count 1))
    count)
  counter)
(defvar f (make-counter 0))
(defvar g (make-counter 0))

(f)
(f)
(g)

68. lambda2::syntax_pitfall

(deffun (f a b) a + b)
(f 5 10)

69. lambda3::curry_lambda

(deffun (f x)
  (lambda (y) (+ x y)))
(defvar x 0)
((f 2) 1)

70. lambda3::lambda_remembers_env

(defvar x 1)
(defvar f
  (lambda (y)
    (+ x y)))
(set! x 2)
(f x)

71. lambda3::counter_lambda

(deffun (make-counter count)
  (lambda ()
    (set! count (+ count 1))
    count))
(defvar f (make-counter 0))
(defvar g (make-counter 0))

(f)
(f)
(g)