当我遇到这个函数的需求时,我正在玩弄一些函数式编程,但是我不知道标准命名法中这种东西被称为什么。 任何人都认可它?叫做什么功能“模式”?
function WhatAmIDoing(args...)
return function()
return args
end
end
编辑:广义的功能,它需要的参数变量量(或者可能是隐式的列表),并返回一个函数,当调用返回所有指定参数时,像咖喱或泡菜,但它似乎也不是。
当我遇到这个函数的需求时,我正在玩弄一些函数式编程,但是我不知道标准命名法中这种东西被称为什么。 任何人都认可它?叫做什么功能“模式”?
function WhatAmIDoing(args...)
return function()
return args
end
end
编辑:广义的功能,它需要的参数变量量(或者可能是隐式的列表),并返回一个函数,当调用返回所有指定参数时,像咖喱或泡菜,但它似乎也不是。
WhatAmIDoing是higher-order function,因为它是一个返回另一个函数的函数。
它返回的是一个thunk —为延迟计算实际值而创建的闭包。通常创建thunk是为了懒惰地评估一个表达式(并可能记住它),但在其他情况下,只需要一个函数来代替裸价值,就像在“constantly 5
”的情况下那样,在某些语言中返回一个函数总是返回5.
后者可能适用于给定的例子,因为假设语言是按照应用顺序进行评估的(即在调用函数之前计算参数),函数除了将值转换为函数之外没有其他目的返回它们。
WhatAmIDoing实际上是我描述的“不断”函数的实现。但总的来说,你不必在内部函数中返回args
。你可以返回“ackermann(args)
”,这可能需要很长的时间,如...
function WhatAmIDoing2(args...)
return function()
return ackermann(args)
end
end
但WhatAmIDoing2将立即返回,因为阿克曼函数的评价将在closure暂停。 (是的,即使是按价值计算的语言。)
代表?
基本上你正在返回一个函数?或函数的输出?
听不懂,对不起......
这不是你平常的C#的东西。函数式编程是一个完全不同的世界,函数返回函数 – 2009-01-14 12:34:32
弗雷德里克是正确的,它不是通常的东西,但我也不知道要在我正在做的事上写一个名字,尽管这似乎是一件有用的事情 – 2009-01-14 12:36:11
我要说的是XXXX返回绑定上的X,Y和Z值的匿名函数的关闭。
这wikipedia制品可以阐明一些
在函数编程一个函数,另一个函数作为参数或返回另一个函数称为higher-order function。
Currying是关于将函数转换为函数链,每个函数只接受一个参数并返回另一个此类函数。所以,这个例子与currying没有关系。
酸洗是通常用来表示某种序列化的术语。可能用于存储由多个值构建的对象。
如果您感兴趣的方面是返回的函数可以访问XXXX函数的参数,那么我会使用Remo.D.
正如其他人所说,这是一个higher-order function。由于您在问题中有“模式”,因此我想补充一点,这种功能语言的功能通常使用strategy pattern以不具有高阶功能的语言进行建模。
非常类似的东西是用Clojure称为constantly
:
只有那constantly
回报需要的参数任意数量的功能,使其成为更普遍的(灵活),比你的格局。
我不知道,如果这种模式有一个名称,但会在正常功能的情况下,预计使用它,但我关心的是一定值返回:
(map (constantly 9) [1 2 3])
=> (9 9 9)
只是想知道,你用这个做什么?
我不认为我会称它为一种模式,而不是如果语句是模式。模式通常可以解决特定的问题。这只是一个非常基础的语言结构。你只是有一个返回闭包的高阶函数。 – jalf 2009-01-14 13:01:04
什么是上下文?我们谈论的代码有多少?只是内部函数能够访问外部定义的变量吗?这只是一个封闭。还是你能够返回嵌套函数?这只是高阶函数的一个属性。 – jalf 2009-01-14 13:08:22