私が理解している限り、ラベルの使用は flet と同じですが、より高いスコープを持つローカル関数を定義することです。あれは正しいですか。例を挙げます:
(defun nested-average (tree)
;labels are the same as flet but with higher scope, define local functions
(labels ((%nested-average
;arguments for the function
(branch sum visited)
(cond
((consp branch)
(multiple-value-call
;calls the previous function with reference to the label
#'%nested-average (rest branch)
(%nested-average (first branch) sum visited)))
;is branch a number
((numberp branch)
(values (+ sum branch) (1+ visited)))
;otherwise
(t
(values sum visited))
)
)
)
(multiple-value-call #'/ (%nested-average tree 0 0))
)
)
;(nested-average ' (10 ((30 1) 20) (8 (5 (50 7)) 9) 40))