问题标签 [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 投票
1 回答
157 浏览

haskell - Haskell:部分应用函数,光线追踪器程序中的函数组合

我在理解函数组成和部分应用函数的概念时遇到了问题。

实际上,我正在编写一个小型光线追踪器,并有一些我不完全理解的示例实现。这是一个我不明白的例子(https://github.com/ryanl/haskell-raytracer/blob/master/src/RayTracer.hs):它是检测光线颜色的函数:

我对(子)函数感兴趣,lightadded其中foldr-part 表示部分应用的函数(当我是对的时候)。函数的概念很明确,就是要把可见光源的光加在曲面上的一点上。对于每个可见光源,都effectivelight映射了一个函数。我不明白的是foldr-function 的最后一个参数(.map effectivelight)和函数的完整构造。有人可以向我解释功能(部分)和功能的构造吗?也许人们可以以更直观的方式编写函数?

0 投票
4 回答
1131 浏览

javascript - 在 Crockford 的 `curry` 方法中,`this` 无效有什么原因吗?

在 Douglas Crockford 的“Javascript: The Good Parts”一书中,他提供了一个curry方法的代码,该方法接受一个函数和参数,并返回带有已添加参数的函数(显然,这不是“咖喱”的真正含义,而是一个例子“部分应用”)。这是代码,我已对其进行了修改,以便无需他制作的其他一些自定义代码即可工作:

因此,如果您有一个add功能:

您可以创建一个已经有一个参数的新函数:

这很好用。但我想知道的是他为什么this要这样做null?预期的行为不会是咖喱方法与原始方法相同,包括相同this吗?

我的咖喱版本如下所示:

例子

(这里是一个例子的jsfiddle)

如果我尝试按照 Douglas Crockford 的方式进行操作:

如果我按照我的方式做:

但是,我觉得如果道格拉斯·克罗克福德按照自己的方式行事,他可能有充分的理由。我错过了什么?

0 投票
11 回答
15921 浏览

javascript - Using Function.prototype.bind with an array of arguments?

How can I call Function.prototype.bind with an array of arguments, as opposed to hardcoded arguments? (Not using ECMA6, so no spread operator).

I'm trying to put a promises wrapper around a module that uses callbacks and I want to bind all of the arguments passed in to my wrapper method and bind them. Then I want to call the partially applied bound function with my own callback, which will resolve or reject a promise.

But obviously this doesn't work because bind expects arguments rather than an array of arguments. I know I could do this by inserting my callback onto the end of the arguments array and using apply:

Or by iterating over the arguments array and rebinding the function for each argument:

But both of these methods feel dirty. Any ideas?

0 投票
1 回答
93 浏览

partial-application - 是否可以在 Livescript 中定义提升的咖喱函数?

如何function在 Livescript 中使用关键字定义柯里化函数?

更简洁地说,我怎样才能得到这个

像这样行事

0 投票
2 回答
608 浏览

clojure - 阅读器 monad 和 Clojure 中的部分函数有什么区别?

Leonardo Borges对 Clojure 中的Monads进行了精彩的演示在其中,他使用以下代码描述了 Clojure 中的 reader monad :

这样做的好处是您正在以纯粹的功能方式从环境中读取值。

但是这种方法看起来非常类似于 Clojure 中的偏函数。考虑以下代码:

我的问题是:读者单子和 Clojure 中的部分函数有什么区别?

0 投票
1 回答
866 浏览

map - 如何在 Common Lisp 中映射函数?

我在 Common Lisp 中制作了这个函数

它工作正常。问题是我想在 Common Lisp 湖中创建一个函数,如下 Haskell 函数

namley,将f部分应用于列表的函数映射。

我做了以下函数来创建列表

并且工作正常,我只需要知道如何进行映射。

0 投票
1 回答
197 浏览

javascript - 是我,还是 John Resig 关于部分应用的热门博文不起作用?

John Resig 有一篇关于偏应用的热门博文:http ://ejohn.org/blog/partial-functions-in-javascript/很多地方都提到过,并且有

但是,博客文章中的代码不起作用。这里是:

现在,如果您尝试在控制台中运行它,它将正常工作。但是,如果您再次尝试使用延迟功能,它将无法正常工作。运行第一段后,尝试在控制台中运行它:

请注意,第二条消息不会出现 - 第一条消息会出现。当然,如果你重新制作延迟函数,它会起作用,但你到底为什么要在每次使用它时重新制作部分应用的函数呢?

现在,鉴于这篇博文是“部分应用程序 javascript”的第二个谷歌搜索结果,而且似乎相当流行,我怀疑它完全被破坏了。另一方面,大量的代码示例和流行的 Prototype.js 库函数以我期望的方式 - 可重用的部分应用程序。他的柯里化功能,在页面稍高的地方,完全符合我的预期。因此:

  • John Resig 的代码不正确吗?
  • 如果不是,为什么他的代码每次要使用它时都强迫你重新制作部分应用的函数?
0 投票
1 回答
63 浏览

haskell - 追查函数偏应用的类型

我一直在检查它的类型Lens以了解它,并且无法确定那里的部分应用程序的结果类型。

初始类型是这样的:type RefF a b = forall f. Functor f => (b -> f b) -> (a -> f a)

上面申请的Identityfunctor类型变成了这样:

它们的修改函数定义如下:

我将上述定义单独分解以更好地理解它。

从上面,类型Identity . mb -> Identity b

我什至使用类型检查器验证了这一点:

现在,我尝试制定r (Identity . m). 这里是我的头脑变得空虚的地方。部分应用的实际结果r (Identity . m)似乎a -> Identity a如下类型检查:

一个人如何在心理上解决这个问题?当我尝试部分适用che于 时r,它似乎不适合:

怎么查出偏应用r che(a -> Identity a)

0 投票
2 回答
125 浏览

c++ - C/C++: A (*eval(A (*function)(B),B b))(){ ... } 可能吗?(可能是 C++11 之前的版本)

在 C/C++(可能是 C++11 之前的版本)中,是否可以这样做

即,一个函数

  1. 从 B 值返回 A 值的函数,
  2. 一个 B 值被馈送到该函数,

它返回 - 一个从 () 中返回 A 的函数 ...??

如果是,会是

  • 高效的??
  • 保证编译器生成在调用返回函数之前不执行的代码?

提前感谢和欢呼,尼克

2014-4-20 (1): 感谢您提及 'evtl.'(固定)std::bind。:-)

所以——要理解——(在没有 Boost 的 C/pre C++11 中)函数指针是例外的,因为函数内部只能声明它们,但无法生成或修改实例——如函数/方法定义是函数指针实例的唯一可能来源,它们可以显式地或通过函数/方法参数从那里移交?

只是问,因为我不清楚函数指针的可能内部表示......

2014-4-20(2):随着Danvil的贡献,是时候揭晓目的了,这里同模板:

这是可行的,而——正如一些人可能已经猜到的那样——从任意匹配的函数/参数集合中的整体,旨在作为零参数过程发送到类似于 try/catch 的单个函数/方法处理执行中。

由于不必为每个不同的参数计数使用几乎相同的代码,实际的想法是生成仍未执行的作业,作为所有情况下相同类型的零参数过程。

尽管如此,我还是没有找到如何在函数内部构造或修改函数指针的方法。以某种方式对 Evaluator 进行“类型转换”似乎不切实际,是吗?

再次,非常感谢,复活节快乐...... :-)

0 投票
3 回答
139 浏览

haskell - Haskell 如何评估这个用偏应用定义的函数?

我试图了解 Haskell 是如何评估pp1 [1,2,3,4][(1,2),(2,3),(3,4)]这里的:

我是这样开始的:

有什么帮助吗?