Loops

Similar to functional programming languages such as Clojure, Stack utilizes recursion for creating loops. The engine checks if a function pushes the recur symbol to the stack after execution. If recur is detected, the engine will rerun the function, preserving the scope and using tail-call recursion.

;; Define i
0 'i def

;; Function isn't lazy so it runs right away
(fn
  ;; Our if block
  '[
    ;; Push i to the stack
    i

    ;; Add 1 to i
    i 1 + 'i set

    ;; Recur
    recur
  ]

  ;; Check if i is less than 5
  i 5 <

  ;; Run the if
  if
)
;; [0 1 2 3 4]

Note: It is 100% possible to use the stack for incrementing the counter, but for the sake of readability, I used variables for this example.