当我遇到对这个函数的需求时,我正在玩一些函数式编程,但是我不知道在标准命名法中这种东西是什么。有人认得吗?
function WhatAmIDoing(args...)
return function()
return args
end
end
编辑:概括该函数,它接受可变数量的参数(或者可能是一个隐式列表)并返回一个函数,该函数在调用时返回所有参数,例如咖喱或泡菜,但似乎也不是。
当我遇到对这个函数的需求时,我正在玩一些函数式编程,但是我不知道在标准命名法中这种东西是什么。有人认得吗?
function WhatAmIDoing(args...)
return function()
return args
end
end
编辑:概括该函数,它接受可变数量的参数(或者可能是一个隐式列表)并返回一个函数,该函数在调用时返回所有参数,例如咖喱或泡菜,但似乎也不是。
WhatAmIDoing 是一个高阶函数,因为它是一个返回另一个函数的函数。
它返回的是一个thunk——一个为延迟计算实际值而创建的闭包。通常创建 thunk 是为了懒惰地评估一个表达式(并且可能记住它),但在其他情况下,只需要一个函数来代替一个裸值,如 " constantly 5
" 的情况,在某些语言中返回一个总是返回 5。
后者可能适用于给定的示例,因为假设语言以应用顺序进行评估(即在调用函数之前评估参数),该函数除了将值转换为返回它们的函数之外没有其他用途。
WhatAmIDoing 实际上是我所描述的“不断”功能的实现。但一般来说,您不必只args
在内部函数中返回。您可以返回“ ackermann(args)
”,这可能需要很长时间,例如...
function WhatAmIDoing2(args...)
return function()
return ackermann(args)
end
end
但是 WhatAmIDoing2 会立即返回,因为对 ackermann 函数的评估将在闭包中暂停。(是的,即使是按值调用的语言。)
在函数式编程中,将另一个函数作为参数或返回另一个函数的函数称为高阶函数。
我会说 XXXX 返回绑定在 x、y 和 z 值上的未命名函数的闭包。
这篇维基百科文章可能会有所启发
柯里化是将一个函数转换为一系列函数,每个函数只接受一个参数并返回另一个这样的函数。所以,这个例子与柯里化无关。
酸洗是一个通常用来表示某种序列化的术语。也许用于存储由多个值构建的对象。
如果您感兴趣的方面是返回的函数可以访问 XXXX 函数的参数,那么我会选择 Remo.D。
constantly
Clojure中调用了非常相似的东西:
只有constantly
返回的函数采用任意数量的参数,使其比您的模式更通用(和灵活)。
我不知道这个模式是否有名字,但会在通常需要函数的情况下使用它,但我只关心返回某个值:
(map (constantly 9) [1 2 3])
=> (9 9 9)
只是想知道,你用这个做什么?
代表?
基本上你正在返回一个函数?还是函数的输出?
没看懂,抱歉。。。