问题标签 [partial-application]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
3 回答
10425 浏览

python - functools.partial 想要使用位置参数作为关键字参数

所以我想了解partial

在:

在:

如果我用作关键字参数,TypeError则消失:y

在:

是什么原因导致的TypeError

0 投票
2 回答
249 浏览

haskell - Function Composition - Haskell

again another question generated by my attempts at the Project Euler questions (follow on from a previous question). I'm having trouble understanding the following line:

Specifically

The type signature for the first argument of map from ghci is [c] -> c:

The type signature for map (product . take 13) from ghci is [[b]] -> [b]:

Am I right in saying that as the first argument of map should be a function, [[b]] is not referring to a list of lists, but rather to a list of (partially applied) functions generated by (product . take 13), with the second argument for the partial functions coming from (tails number)?

0 投票
1 回答
458 浏览

haskell - 使用部分应用函数缓存内部结构

想象这样一个函数:

该函数IO使用 aFoo和其他值执行一些操作。该Foo值必须传递给bar,并且可以IO通过以下方式检索:

现在,ABCX都是纯纯值。我更喜欢这样的bar功能:

并且Foo将使用该值在bar函数中生成。X如果我这样做:

f :: A -> B -> C -> IO (). 如果我多次调用该函数,X由于部分应用,该值保持不变,但由于它是IO效果,因此每次都会生成它。是否有一种原生的、内置的 ghc方式来执行某种缓存,以便Foo生成一次值——用于生成的闭包?我想这一切都与拳击有关,但我从来没有想过如何在不使用脏的情况下做到这一点IORef,扩展 的参数bar,这很难看。

0 投票
3 回答
626 浏览

function - Haskell 中的函数应用

好的,这是漫长的一天,我的大脑可能无法在 Haskell 级别上运行,但我无法理解“Learn You a Haskell”中的一个例子。

该部分被称为带有 $ 的函数应用程序,并且有如何$定义的示例:

到目前为止,一切都清楚了。我理解本节中的所有示例,除了最后一个:

在这里,我们($ 3)跨函数列表进行映射,并将这些函数应用到3. 但这怎么可能?

从第一个代码片段可以清楚地看出,第一个参数是一个函数,我们甚至可以这样写:

现在($ 3)是函数的一个部分应用$,而是3在函数的位置上!那么3应该是一个功能还是什么?

还有一个谜团:到底是(4+)什么?我知道那(+4)是函数的偏应用+,那么(4+)应该是函数的偏应用4吗?废话。什么样的技巧在这里起作用?

0 投票
5 回答
2453 浏览

haskell - 具有多个参数的 Haskell 中的部分应用

给定一些函数 f(x1,x2,x3,..,xN),在几个地方部分应用它通常很有用。例如,对于 N=3,我们可以定义 g(x)=f(1,x,3)。然而,Haskell 中的标准部分应用程序并不能以这种方式工作,它只允许我们通过固定第一个参数来部分应用一个函数(因为所有函数实际上只接受一个参数)。有没有简单的方法来做这样的事情:

输出值为f 1 2 3? 当然我们可以做一个 lambda 函数

但我觉得这很不可读。例如,在 Mathematica 中它是这样工作的,我觉得这很好:

带输出f[1,2,3]

编辑:也许我应该多说一些关于动机的事情。我想在点式组合中使用这种部分应用的函数,即在这样的表达式中:

得到h 3 = g(f(k(3),2)).

0 投票
2 回答
827 浏览

haskell - 为什么可以在haskell中定义没有参数的函数

我有函数 add,我部分应用它来创建一个新函数 addOne。

addOne 可以使用显式参数定义

或没有显式参数

我有四个问题:

  1. 为什么我可以在没有显式参数的情况下定义新函数?
  2. 这两个定义有什么区别吗?
  3. 我什么时候知道什么时候可以定义没有参数的函数?
  4. 首选哪个定义以及何时?
0 投票
1 回答
177 浏览

scala - Scala:foreach 中的咖喱函数?

我在使用“foreach”方法迭代集合时尝试使用 curried 函数:

为什么行 'lst.foreach(fun("one"),("two") _) ' 不编译并返回:

错误信息?

0 投票
1 回答
146 浏览

scala - Scala:在'foreach'中使用咖喱函数从文件中读取行?

从文件中读取行我尝试在“foreach”中使用咖喱函数:

出于某种原因,以下两种说法都没有:

产生任何输出。为什么?

0 投票
1 回答
98 浏览

javascript - Javascript currying:为什么一个闭包范围示例有效,而另一个无效?

我正在尝试了解 Vimeo 上的视频“Understanding Function Currying”(http://vimeo.com/41238143,但没有必要为了理解这个问题而查看它)。

我理解的例子

在视频的开头,我们被告知此代码存在问题:

在此处输入图像描述

这段代码的问题:在第 11 行和第 14 行使用回调不起作用,因为它超出了范围 - onSuccess存在于buildCRUD范围内,而不是create范围内。(我将其称为“回调示例”。)

好的,这对我来说很有意义。考虑的解决方案包括使用单个类变量(我知道这个术语是关闭的,因为 javascript 没有类,但你知道我的意思)。

看不懂的例子

这就是我感到困惑的地方。在视频的最后,我们被告知该函数不同部分的代码将起作用。(注意“className”变量参数;我将其称为“className 示例”。)

(对不起,我切断了写着“var ...”的行,请相信我它就在那里,并且createFngetFn等都被声明为长“var”行的一部分。)

在此处输入图像描述

如您所见,这些函数(如createFn )的实现确实使用了className变量,尽管它没有作为参数传递给函数。

在此处输入图像描述

这是我的问题:为什么className在createFn的范围内?在我看来,它在forClass范围内并不比onSuccess在 create 范围内更多。

这和这有关系吗...

  • 回调示例中的函数从未在创建函数上下文中被分配为变量,仅被调用?
  • 使用承诺的回调示例?
0 投票
2 回答
233 浏览

f# - 为什么这个无点 F# 函数的行为与非无点版本不同?

考虑以下 F#:-

在我看来,功能getValFromMapPartial和是相同的。getValFromMapPartialAndTacitF# 说它们具有完全相同的类型:(string -> int). 然而它们的行为非常不同,它们的编译方式也非常不同。使用 dotPeek 进行反编译,我看到这getValFromMapPartial是一个方法,而getValFromMapPartialAndTacit它是一个在 ctor 中初始化的字段。

F# 不会抱怨getValFromMapPartialAndTacit,即使在最高警告级别(在 VS 2012 和 2013 中)。然而在我上面的示例中调用这个函数失败了,大概是因为它已经包装了初始的空版本someMap,尽管它是可变的。

为什么这两个功能有区别?F# 是否应该警告默认/无点版本可能会失败?