function WhatAmIDoing(args...)
return function()
return args
end
end
编辑:概括了该函数,它需要一个可变数量的参数(或者可能是一个隐式列表)并返回一个函数,当被调用时返回所有的args,类似咖喱或泡菜,但是它似乎也不是。
答案 0 :(得分:11)
WhatAmIDoing是higher-order function,因为它是一个返回另一个函数的函数。
它返回的是thunk - 为延迟计算实际值而创建的闭包。通常会创建thunk以懒惰地计算表达式(并可能记住它),但在其他情况下,只需要一个函数来代替一个裸值,就像“constantly 5
”的情况一样,在某些语言中返回一个总是返回5的函数。
后者可能适用于给定的示例,因为假设语言以applicative-order进行求值(即在调用函数之前计算参数),该函数除了将值转换为返回它们的函数之外没有任何其他目的。 / p>
WhatAmIDoing实际上是我所描述的“不断”功能的实现。但一般来说,您不必仅在内部函数中返回args
。您可以返回“ackermann(args)
”,这可能需要很长时间,如...
function WhatAmIDoing2(args...)
return function()
return ackermann(args)
end
end
但WhatAmIDoing2会立即返回,因为ackermann函数的评估将暂停在closure中。 (是的,即使是按值调用语言。)
答案 1 :(得分:5)
在函数式编程中,将另一个函数作为参数或返回另一个函数的函数称为higher-order function。
答案 2 :(得分:4)
我想说XXXX会返回x,y和z值绑定的未命名函数的闭包。
这篇wikipedia文章可能会有所启发
答案 3 :(得分:2)
Currying是关于将函数转换为函数链,每个函数只接受一个参数并返回另一个这样的函数。所以,这个例子与currying无关。
酸洗是一个通常用于表示某种序列化的术语。也许用于存储由多个值构建的对象。
如果您感兴趣的方面是返回的函数可以访问XXXX函数的参数,那么我将使用Remo.D。
答案 4 :(得分:1)
正如其他人所说,它是higher-order function。正如您在问题中有“模式”一样,我想我会补充一点,函数式语言的这一特性通常使用strategy pattern语言建模,而不使用高阶函数。
答案 5 :(得分:1)
在Clojure中称为constantly
的东西非常相似:
只有constantly
返回的函数才会获取任意数量的参数,使其比模式更通用(也更灵活)。
我不知道这个模式是否有名称,但是在通常需要函数的情况下会使用它,但我所关心的是返回某个值:
(map (constantly 9) [1 2 3])
=> (9 9 9)
只是想知道,你用它做什么?
答案 6 :(得分:-2)
代表?
基本上你正在返回一个函数?或函数的输出?
不明白,对不起......