醉里且贪欢笑,要愁那得工夫。近来始觉古人书,信着全无是处。 昨夜松边醉倒,问松“我醉何如”。只疑松动要来扶,以手推松曰:“去”!

2007年5月8日星期二

FLET and LABELS

基础形式是一样的
(flet (function-definition*)
body-form*)
(labels (function-definition*)
body-form*)
其中function-definition形式如下:
(name (parameter*) form*)
两者的不同之处:
FLET:
FLET中定义的函数名只能用在FLET的body中
不能定义递归函数

LABELS:
LABELS中定义的函数名可以用在Labels本身定义的函数的body中.
可以定义递归函数
为什么会同时存在FLET和LABELS?
有时候FLET是有用的,当我们要定义一个local函数,而这个函数要调用它的同名函数或者是调用在封闭域中的已经定义的全局或local函数.
在FLET和LABELS的body中你能使用已经定义的函数名像调用其他的函数一样也可以使用FUNCTION(得到函数对象)操作符
local函数能应用封闭域内的变量,所以在调用过程时可能用到更少的参数,相比等效的帮助函数(helper function),这可是相当的方便那.

没有评论: