This answer is written to demonstrate the little-known ring
data structure available in Emacs' built-ins:
(defun function-1 () (print "Function 1"))
(defun function-2 () (print "Function 2"))
(defun function-3 () (print "Function 3"))
(defvar functions (let ((result (make-ring 3)))
(ring-insert result 'function-1)
(ring-insert result 'function-2)
(ring-insert result 'function-3)
result))
(defun cycle-functions ()
(funcall
(ring-insert functions
(ring-ref functions
(1- (ring-size functions))))))
(with-output-to-string
(cl-loop repeat 10 do (cycle-functions)))
"
\"Function 1\"
\"Function 2\"
\"Function 3\"
\"Function 1\"
\"Function 2\"
\"Function 3\"
\"Function 1\"
\"Function 2\"
\"Function 3\"
\"Function 1\"
"
The difference between this and other answers is that here you have the data structure to manipulate, which means that you can program a change in the order of execution of functions, whereas in other suggested answers this isn't an option. Whether you need that or not, is, of course, up to you.