在关于代码审查的这个问题中,我被告知要使用labels代替defun.我已经在互联网上看了,但我找不到任何方法来使用它,仍然保持我的代码的方式.
我怎么能labels在我的代码中使用?
(defun example ()
(let ((a 0)
(f nil))
(macrolet ((next (state)
`(setf f (function ,state))))
(labels ((init ()
(setf a 0)
(next inc))
(inc ()
(incf a)
(next inc)
(when (> a 5)
(next reset)))
(reset ()
(setf a 0)
(next inc))
(controller ()
(funcall f)
(print a)))
(init)
(loop repeat 20
do (controller))))))
Run Code Online (Sandbox Code Playgroud)
示例电话:
CL-USER 7 > (example)
1
2
3
4
5
6
0
1
2
3
4
5
6
0
1
2
3
4
5
6
NIL
Run Code Online (Sandbox Code Playgroud)