问题1:
var _curry1 = function _curry1(fn) {
return function f1(a) {
if (arguments.length === 0) {
return f1;
} else if (a != null && a['@@functional/placeholder'] === true) {
return f1;
} else {
return fn.apply(this, arguments);
}
};
};检查a['@@functional/placeholder'] === true的目的是什么?
问题2:
http://ramdajs.com/0.18.0/docs/#reduce
我怎么读表示法?
(a,b -> a) -> a -> [b] -> a
这是我第一次看到这样的符号,它是从哪里来的?
发布于 2015-10-15 07:33:13
问题1:
没有“符号”。.js应该清除它:
module.exports = {'@@functional/placeholder': true};因此,@@functional/placeholder与foo在
a = { foo: true }
a.foo
a["foo"](显然,您不能编写a.@@functional/placeholder,因为这里有很多奇怪的符号。)
在该文件中也可以看出意图:
/**
* A special placeholder value used to specify "gaps" within curried functions,
* allowing partial application of any combination of arguments,
* regardless of their positions.
*
* If `g` is a curried ternary function and `_` is `R.__`, the following are equivalent:
*
* - `g(1, 2, 3)`
* - `g(_, 2, 3)(1)`
* - `g(_, _, 3)(1)(2)`
* - `g(_, _, 3)(1, 2)`
* - `g(_, 2, _)(1, 3)`
* - `g(_, 2)(1)(3)`
* - `g(_, 2)(1, 3)`
* - `g(_, 2)(_, 3)(1)`
...因此,其意图是能够“跳过”一些地方时,竞速。测试决定参数是真正的参数还是__.js占位符,并相应地进行操作。为什么它是@@functional/placeholder --大概正是因为人们希望它太奇怪了,因此不会与任何人的合法数据发生冲突。
问题2:
该表示法在类型理论上是标准的,并由Haskell推广。a和b是任何类型。(...)是一个类型的元组,[a]是一个元素为a的列表。a -> b是一个函数,它接受a类型的参数并产生b类型的返回,并且是正确的关联函数。有关例子如下:
它是一个函数,它接受一个参数--一个函数接受两个参数(分别为a和b类型),并返回一个a类型的值;并生成一个函数,该函数接受a类型的参数,并返回一个参数,该参数是b类型的元素列表,返回类型a的值。
这读起来非常令人困惑,但简单的描述要容易一些:它是一个包含三个参数的函数:第一个是函数(如上所述),第二个是a的值,第三个是b元素的列表,并返回一个a的值。
具体来说,R.reduce是这样一个函数:
R.reduce(add, 10, numbers);add是一个函数,它接受两个整数( a和b都是相同的整数),并返回一个整数((a, b) -> a);10是整数(a)类型;数字是整数列表([b]);返回值是整数(a)。
注意,它混合了咖喱语法和非咖喱语法;如果它是完全咖喱的,那么add将是a -> b -> a,而不是(a, b) -> a。
发布于 2015-10-15 07:33:00
问题2:
那是印地语-米尔纳式签名。对于给出的例子,'a‘和'b’是任意类型,‘-’是一个函数.
所以让我们把它分解。
首先,我们使用一个类型'a‘和一个函数'b -> a’
(a,b -> a)
这将返回一个函数,该函数返回一个函数。(因为你知道,跑步)。关键是我们可以添加“()”,使其更具可读性。
(a,b -> a) -> (a -> (b -> a))
因此,如果您传递这个函数'a‘和一个函数'a’-> 'b',您将返回
A -> (b -> a)
如果你传递给这个类型的a
B -> a
其中b是一个类型为‘b’的数组。传递此函数b将给出一个类型a。
一个
如果您想阅读更多关于JavaScript函数式编程的内容,我可以推荐最充分的指南。
https://stackoverflow.com/questions/33142252
复制相似问题