这个功能性“模式”叫什么?

时间:2009-01-14 12:28:36

标签: functional-programming naming-conventions nomenclature

当我遇到需要这个函数的时候,我正在搞一些函数式编程,但是我不知道在标准命名法中这是什么类型的东西。 有谁认出来了吗?

function WhatAmIDoing(args...)
   return function()
       return args
   end
end

编辑:概括了该函数,它需要一个可变数量的参数(或者可能是一个隐式列表)并返回一个函数,当被调用时返回所有的args,类似咖喱或泡菜,但是它似乎也不是。

7 个答案:

答案 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的东西非常相似:

http://github.com/richhickey/clojure/blob/ab6fc90d56bfb3b969ed84058e1b3a4b30faa400/src/clj/clojure/core.clj#L1096

只有constantly返回的函数才会获取任意数量的参数,使其比模式更通用(也更灵活)。

我不知道这个模式是否有名称,但是在通常需要函数的情况下会使用它,但我所关心的是返回某个值:

(map (constantly 9) [1 2 3])
=> (9 9 9) 

只是想知道,你用它做什么?

答案 6 :(得分:-2)

代表?

基本上你正在返回一个函数?或函数的输出?

不明白,对不起......