问题1:
newlist = [s + x for x in mylist]
检查 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);
}
};
};
的目的是什么?
问题2:
http://ramdajs.com/0.18.0/docs/#reduce
我如何阅读符号?
a['@@functional/placeholder'] === true
这是我第一次看到这样的符号,它来自哪里?
答案 0 :(得分:2)
问题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
的值。
这读起来很容易混淆,但是一个未经描述的描述会更容易一些:它是一个带有三个参数的函数:第一个是函数(如上所述),第二个是值{{1} },第三个是a
元素列表,返回值b
。
具体来说,a
就是这样一个功能:在
R.reduce
R.reduce(add, 10, numbers);
是一个函数,它接受两个整数(add
和a
相同,整数),并返回一个整数(b
); (a, b) -> a
的类型为整数(10
); numbers是整数列表(a
);返回值是一个整数([b]
)。
请注意,它混合了curried和uncurried语法;如果它是完全curry,a
将是add
,而不是a -> b -> a
。
答案 1 :(得分:1)
问题2:
这是Hindley-Milner型签名。对于给出的示例,'a'和'b'是任意类型和' - >'是一个功能。
所以让我们把它分解。
首先,我们采用类型'a'和函数'b - >一个“
(a,b - > a)
这会返回一个函数,它返回一个函数,...(因为你知道,currying)。关键是我们可以添加'()'以使其更具可读性。
(a,b - > a) - > (a - >([b] - > a))
所以如果你传递这个函数'a'和函数'a' - > 'b',你回来了
a - > ([b] - > a)
如果您传递此类型'a'
[b] - >一个
其中[b]是'b'类型的数组。传递这个功能[b]给你 a型
一
如果您想在JavaScript中阅读有关函数式编程的更多信息,我可以推荐The Mostly Adequate Guide