由於是一個簡單的,數學咖喱功能減去的數字:在Javascript中,哪些參數順序與運算符一起作爲預先熟悉的函數和組合?
function sub(x) {
return function (y) {
return x - y;
};
};
sub(3)(2); // 1
函數簽名完全相同讀作得到的結果。的情況,只要功能組合物涉及改變:
function comp(f) {
return function (g) {
return function (x) {
return f(g(x));
};
};
};
function gte(x) {
return function (y) {
return x >= y;
};
};
comp(gte(2))(sub(3)) (4); // true
隨着功能的組合物,所涉及的每個函數的最後一個參數是至關重要的,因爲它是與由先前施加的函數返回的值分別進料。上述例子中的組合物因此讀作:4 - 3 >= 2
,其將產生false
。實際上,構圖背後的計算是:2 >= 3 - 4
,其產生true
。
我可以重寫sub
和gte
容易得到期望的結果:
function sub(y) {
return function (x) {
return x - y;
};
};
function gte(y) {
return function (x) {
return x >= y;
};
};
comp(gte(2))(sub(3)) (4); // false
但現在的直接調用函數的返回值是不同的比預期:
sub(3)(2); // -1 (but reads like 1)
gte(2)(3); // true (but reads like false)
我可以切換的參數對於每個呼叫或爲每種情況定義部分應用功能:
function flip(f) {
return function (x) {
return function (y) {
return f(y)(x);
};
};
}
flip(gte)(2)(3); // false
var gteFlipped = flip(gte);
gteFlipped(2)(3); // false
這兩種變體顯然很麻煩,也不可讀。
哪個參數順序更可取?還是有兩種機制可以使用,這取決於各自的要求(如Haskell的部分應用運算符的左/右部分)?
一個可能的解決方案必須考慮到,我只使用一元函數!
也許你正在尋找:https:// github。com/algesten/fnuc –
@AaditMShah:我知道這個問題,但它指的是具有外部咖喱功能的正常的n元Javascript函數。 – rand
如果你覺得你的問題沒有回答,那麼你可以投票重新提出問題。在此之前,我會考慮你的問題並嘗試找到解決方案。 –