Skip to content

Instantly share code, notes, and snippets.

@praveenKajla
Last active September 8, 2017 08:42
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save praveenKajla/01fe297f10c5796157706d996b45745f to your computer and use it in GitHub Desktop.
Save praveenKajla/01fe297f10c5796157706d996b45745f to your computer and use it in GitHub Desktop.
JS Bin// source https://jsbin.com/gajuqej
"use strict";
function _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) arr2[i] = arr[i]; return arr2; } else { return Array.from(arr); } }
var log = console.log;
function example(a, b, c) {
log({ a: a, b: b, c: c });
return a * b * c;
}
var __ = Symbol("someempty string");
var isPlaceholder = function isPlaceholder(a) {
return a === __;
};
var notPlaceholder = function notPlaceholder(a) {
return !isPlaceholder(a);
};
var removePlaceholder = function removePlaceholder(a) {
return a.filter(function (z) {
return notPlaceholder(z);
});
};
function partial(func) {
for (var _len = arguments.length, args1 = Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {
args1[_key - 1] = arguments[_key];
}
var numReqArgs = func.length;
return function _partial() {
for (var _len2 = arguments.length, args2 = Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {
args2[_key2] = arguments[_key2];
}
var filledIn = args1.map(function (x) {
return isPlaceholder(x) && args2.length ? args2.shift() : x;
});
var current = [].concat(_toConsumableArray(filledIn), args2);
var validArgs = removePlaceholder(current);
if (validArgs.length >= numReqArgs) {
return func.apply(undefined, _toConsumableArray(validArgs));
} else {
return partial.apply(undefined, [func].concat(_toConsumableArray(current)));
}
};
}
var pa1 = partial(example, __, __, __);
var pa2 = pa1(100)(3);
pa2(3);
"use strict";
const {log} = console;
function example(a,b,c){
log({a,b,c});
return a*b*c;
}
const __ = Symbol("someempty string")
const isPlaceholder = a => a===__;
const notPlaceholder = a => !(isPlaceholder(a))
const removePlaceholder = a => a.filter(z => notPlaceholder(z))
function partial(func,...args1){
const numReqArgs = func.length;
return function _partial(...args2){
const filledIn = args1.map(x => isPlaceholder(x) && args2.length ?
args2.shift() : x)
const current = [...filledIn,...args2]
const validArgs = removePlaceholder(current)
if(validArgs.length>=numReqArgs){
return func(...validArgs)
}
else{
return partial(func,...current);
}
}
}
const pa1 = partial(example,__,__,__)
const pa2 = pa1(100)(3);
pa2(3)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment