6
In this question on code reviewdefun
の代わりにlabels
を使用するように言われました。私はインターネットを見てきましたが、私はそれを使う方法を見つけることができず、それでも私のコードをそのまま保ちました。Common Lispでのラベルの使用
labels
はどのように使用できますか?
In this question on code reviewdefun
の代わりにlabels
を使用するように言われました。私はインターネットを見てきましたが、私はそれを使う方法を見つけることができず、それでも私のコードをそのまま保ちました。Common Lispでのラベルの使用
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))))))
例コール:
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
ありがとう!もし私がしたいときだけ 'init'を呼びたいのであればどうしますか? – gumbo
これは、 'labels'の簡単で簡単な説明に役立ちます。 –