这个功能性"模式"叫什么?

Rob*_*uld 6 functional-programming naming-conventions nomenclature

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

function WhatAmIDoing(args...)
   return function()
       return args
   end
end
Run Code Online (Sandbox Code Playgroud)

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

Jon*_*ran 11

WhatAmIDoing是一个高阶函数,因为它是一个返回另一个函数的函数.

它返回的东西是一个thunk - 为延迟计算实际值而创建的闭包.通常会创建thunk来懒惰地计算表达式(并且可能会记住它),但在其他情况下,只需要一个函数来代替一个裸值,就像在" constantly 5" 的情况下一样,在某些语言中返回一个总是函数的函数返回5.

后者可能适用于给定的示例,因为假设语言以applicative-order进行求值(即在调用函数之前计算参数),该函数除了将值转换为返回它们的函数之外没有任何其他目的.

WhatAmIDoing实际上是我所描述的"持续"功能的实现.但总的来说,你不必只返回args内部函数.您可以返回" ackermann(args)",这可能需要很长时间,如...

function WhatAmIDoing2(args...)
   return function()
       return ackermann(args)
   end
end
Run Code Online (Sandbox Code Playgroud)

但是WhatAmIDoing2会立即返回,因为ackermann函数的评估将在闭包中暂停.(是的,即使是按值调用语言.)


小智 5

在函数式编程中,将另一个函数作为参数或返回另一个函数的函数称为高阶函数.