Higher order function returns pure function
Clash Royale CLAN TAG#URR8PPP
up vote
17
down vote
favorite
Here's an example of an higher order function called functionA that has customValue as input and returns a function that gets an input and uses the custom value to elaborate a result:
let functionA = (customValue) =>
let value = customValue ;
Here's some results:
functionA()(4)
// => returns 4
functionA(2)(4)
// => returns 8
functionA(3)(4)
// => returns 12
functionA(4)(4)
// => returns 16
Can the function returned by functionA be considered pure?
UPDATE: the examples above are only using numeric input. As described by @CRice, the returned function can be considered pure only when customValue is constant and doesn't have internal state (like classes).
javascript higher-order-functions pure-function
 |Â
show 3 more comments
up vote
17
down vote
favorite
Here's an example of an higher order function called functionA that has customValue as input and returns a function that gets an input and uses the custom value to elaborate a result:
let functionA = (customValue) =>
let value = customValue ;
Here's some results:
functionA()(4)
// => returns 4
functionA(2)(4)
// => returns 8
functionA(3)(4)
// => returns 12
functionA(4)(4)
// => returns 16
Can the function returned by functionA be considered pure?
UPDATE: the examples above are only using numeric input. As described by @CRice, the returned function can be considered pure only when customValue is constant and doesn't have internal state (like classes).
javascript higher-order-functions pure-function
5
There is healthy, meaningful discussion in the community about what "pure" means for functions. One (over?-)simplified definition is "no side effects"--no impact on variables/state outside the function scope that would make the function have different effects with the same input. Your functionA definitely meets that criterion. I say yes.
– Andy Taton
Aug 22 at 2:28
4
If you only consider reasonable input, i.e.number
(or BigInt, now) – see CRice’s answer – then yes, it’s pure.
– Ry-♦
Aug 22 at 2:42
2
Some kindly folks upvoted my comment, but it's clear I misinterpreted the question. You did not ask "Is functionA pure?", but rather "Is the function returned by functionA always pure, by virtue of functionA?" As someone else answers below, I think the answer to this second question is "no".
– Andy Taton
Aug 22 at 2:45
Puzzles in JS are hard to solve with many kinds of overloading available. (same for C++)
– user202729
Aug 22 at 7:30
For OP: Don't edit the answer into the question. If you want to answer post an answer.
– user202729
Aug 22 at 7:31
 |Â
show 3 more comments
up vote
17
down vote
favorite
up vote
17
down vote
favorite
Here's an example of an higher order function called functionA that has customValue as input and returns a function that gets an input and uses the custom value to elaborate a result:
let functionA = (customValue) =>
let value = customValue ;
Here's some results:
functionA()(4)
// => returns 4
functionA(2)(4)
// => returns 8
functionA(3)(4)
// => returns 12
functionA(4)(4)
// => returns 16
Can the function returned by functionA be considered pure?
UPDATE: the examples above are only using numeric input. As described by @CRice, the returned function can be considered pure only when customValue is constant and doesn't have internal state (like classes).
javascript higher-order-functions pure-function
Here's an example of an higher order function called functionA that has customValue as input and returns a function that gets an input and uses the custom value to elaborate a result:
let functionA = (customValue) =>
let value = customValue ;
Here's some results:
functionA()(4)
// => returns 4
functionA(2)(4)
// => returns 8
functionA(3)(4)
// => returns 12
functionA(4)(4)
// => returns 16
Can the function returned by functionA be considered pure?
UPDATE: the examples above are only using numeric input. As described by @CRice, the returned function can be considered pure only when customValue is constant and doesn't have internal state (like classes).
javascript higher-order-functions pure-function
edited Aug 22 at 3:13
asked Aug 22 at 2:19


pnknrg
541320
541320
5
There is healthy, meaningful discussion in the community about what "pure" means for functions. One (over?-)simplified definition is "no side effects"--no impact on variables/state outside the function scope that would make the function have different effects with the same input. Your functionA definitely meets that criterion. I say yes.
– Andy Taton
Aug 22 at 2:28
4
If you only consider reasonable input, i.e.number
(or BigInt, now) – see CRice’s answer – then yes, it’s pure.
– Ry-♦
Aug 22 at 2:42
2
Some kindly folks upvoted my comment, but it's clear I misinterpreted the question. You did not ask "Is functionA pure?", but rather "Is the function returned by functionA always pure, by virtue of functionA?" As someone else answers below, I think the answer to this second question is "no".
– Andy Taton
Aug 22 at 2:45
Puzzles in JS are hard to solve with many kinds of overloading available. (same for C++)
– user202729
Aug 22 at 7:30
For OP: Don't edit the answer into the question. If you want to answer post an answer.
– user202729
Aug 22 at 7:31
 |Â
show 3 more comments
5
There is healthy, meaningful discussion in the community about what "pure" means for functions. One (over?-)simplified definition is "no side effects"--no impact on variables/state outside the function scope that would make the function have different effects with the same input. Your functionA definitely meets that criterion. I say yes.
– Andy Taton
Aug 22 at 2:28
4
If you only consider reasonable input, i.e.number
(or BigInt, now) – see CRice’s answer – then yes, it’s pure.
– Ry-♦
Aug 22 at 2:42
2
Some kindly folks upvoted my comment, but it's clear I misinterpreted the question. You did not ask "Is functionA pure?", but rather "Is the function returned by functionA always pure, by virtue of functionA?" As someone else answers below, I think the answer to this second question is "no".
– Andy Taton
Aug 22 at 2:45
Puzzles in JS are hard to solve with many kinds of overloading available. (same for C++)
– user202729
Aug 22 at 7:30
For OP: Don't edit the answer into the question. If you want to answer post an answer.
– user202729
Aug 22 at 7:31
5
5
There is healthy, meaningful discussion in the community about what "pure" means for functions. One (over?-)simplified definition is "no side effects"--no impact on variables/state outside the function scope that would make the function have different effects with the same input. Your functionA definitely meets that criterion. I say yes.
– Andy Taton
Aug 22 at 2:28
There is healthy, meaningful discussion in the community about what "pure" means for functions. One (over?-)simplified definition is "no side effects"--no impact on variables/state outside the function scope that would make the function have different effects with the same input. Your functionA definitely meets that criterion. I say yes.
– Andy Taton
Aug 22 at 2:28
4
4
If you only consider reasonable input, i.e.
number
(or BigInt, now) – see CRice’s answer – then yes, it’s pure.– Ry-♦
Aug 22 at 2:42
If you only consider reasonable input, i.e.
number
(or BigInt, now) – see CRice’s answer – then yes, it’s pure.– Ry-♦
Aug 22 at 2:42
2
2
Some kindly folks upvoted my comment, but it's clear I misinterpreted the question. You did not ask "Is functionA pure?", but rather "Is the function returned by functionA always pure, by virtue of functionA?" As someone else answers below, I think the answer to this second question is "no".
– Andy Taton
Aug 22 at 2:45
Some kindly folks upvoted my comment, but it's clear I misinterpreted the question. You did not ask "Is functionA pure?", but rather "Is the function returned by functionA always pure, by virtue of functionA?" As someone else answers below, I think the answer to this second question is "no".
– Andy Taton
Aug 22 at 2:45
Puzzles in JS are hard to solve with many kinds of overloading available. (same for C++)
– user202729
Aug 22 at 7:30
Puzzles in JS are hard to solve with many kinds of overloading available. (same for C++)
– user202729
Aug 22 at 7:30
For OP: Don't edit the answer into the question. If you want to answer post an answer.
– user202729
Aug 22 at 7:31
For OP: Don't edit the answer into the question. If you want to answer post an answer.
– user202729
Aug 22 at 7:31
 |Â
show 3 more comments
3 Answers
3
active
oldest
votes
up vote
22
down vote
accepted
Using this definition of Pure Function:
In computer programming, a pure function is a function that has the
following properties:
Its return value is the same for the same arguments (no variation with
local static variables, non-local variables, mutable reference
arguments or input streams from I/O devices).
Its evaluation has no
side effects (no mutation of local static variables, non-local
variables, mutable reference arguments or I/O streams).
Then, no, functionA
will not always return a pure function.
Here is a way to use functionA
so that it does not return a pure function:
let functionA = (customValue) => 1;
return input => input * value;
;
class Mutater
constructor()
this.i = 0;
valueOf()
return this.i++;
const nonPureFunction = functionA(new Mutater());
// Produces different results for same input, eg: not pure.
console.log(nonPureFunction(10));
console.log(nonPureFunction(10));
As you can see, the returned function, when given the same input (10
), produces a different result. This violates the first condition from the above definition (and using the same trick you could also violate the second).
8
so we can say that as long as customValue doesn't have internal state then the function returned by functionA is pure. Correct?
– pnknrg
Aug 22 at 2:50
I would say yes, as long ascustomValue
is constant. But you can also passmutator
as the argument to the returned function for the same kind of shenanigans. But would that still count as the "same input"? I don't know.
– CRice
Aug 22 at 2:55
@pnknrg Would reading from e.g. a stream be considered "internal state"? I think one could just stick with the Wikipedia definition to find thatfunctionA
is pure ifcustomValue
is pure.
– Max Langhof
Aug 22 at 9:46
As long as you have mutable data types like Object in JS you will not have pure functions. JS is just a toy language trying to implement functional programming paradigm. With primitive data types like String this might not be the case though.
– Redu
Aug 22 at 19:17
add a comment |Â
up vote
1
down vote
Yes, the function that is returned, can be considered pure. The reason that it is considered pure, is because the function will always return the same output given the exact same input.
add a comment |Â
up vote
0
down vote
Your returned functions can be considered as pure function. In your example, you have effectively 4 different pure functions.
const pureFunc1 = functionA();
pureFunc1(4) // => returns 4
pureFunc1(4) // => returns 4
const pureFunc2 = functionA(2);
pureFunc2(4) // => returns 8
pureFunc2(4) // => returns 8
// ...
add a comment |Â
3 Answers
3
active
oldest
votes
3 Answers
3
active
oldest
votes
active
oldest
votes
active
oldest
votes
up vote
22
down vote
accepted
Using this definition of Pure Function:
In computer programming, a pure function is a function that has the
following properties:
Its return value is the same for the same arguments (no variation with
local static variables, non-local variables, mutable reference
arguments or input streams from I/O devices).
Its evaluation has no
side effects (no mutation of local static variables, non-local
variables, mutable reference arguments or I/O streams).
Then, no, functionA
will not always return a pure function.
Here is a way to use functionA
so that it does not return a pure function:
let functionA = (customValue) => 1;
return input => input * value;
;
class Mutater
constructor()
this.i = 0;
valueOf()
return this.i++;
const nonPureFunction = functionA(new Mutater());
// Produces different results for same input, eg: not pure.
console.log(nonPureFunction(10));
console.log(nonPureFunction(10));
As you can see, the returned function, when given the same input (10
), produces a different result. This violates the first condition from the above definition (and using the same trick you could also violate the second).
8
so we can say that as long as customValue doesn't have internal state then the function returned by functionA is pure. Correct?
– pnknrg
Aug 22 at 2:50
I would say yes, as long ascustomValue
is constant. But you can also passmutator
as the argument to the returned function for the same kind of shenanigans. But would that still count as the "same input"? I don't know.
– CRice
Aug 22 at 2:55
@pnknrg Would reading from e.g. a stream be considered "internal state"? I think one could just stick with the Wikipedia definition to find thatfunctionA
is pure ifcustomValue
is pure.
– Max Langhof
Aug 22 at 9:46
As long as you have mutable data types like Object in JS you will not have pure functions. JS is just a toy language trying to implement functional programming paradigm. With primitive data types like String this might not be the case though.
– Redu
Aug 22 at 19:17
add a comment |Â
up vote
22
down vote
accepted
Using this definition of Pure Function:
In computer programming, a pure function is a function that has the
following properties:
Its return value is the same for the same arguments (no variation with
local static variables, non-local variables, mutable reference
arguments or input streams from I/O devices).
Its evaluation has no
side effects (no mutation of local static variables, non-local
variables, mutable reference arguments or I/O streams).
Then, no, functionA
will not always return a pure function.
Here is a way to use functionA
so that it does not return a pure function:
let functionA = (customValue) => 1;
return input => input * value;
;
class Mutater
constructor()
this.i = 0;
valueOf()
return this.i++;
const nonPureFunction = functionA(new Mutater());
// Produces different results for same input, eg: not pure.
console.log(nonPureFunction(10));
console.log(nonPureFunction(10));
As you can see, the returned function, when given the same input (10
), produces a different result. This violates the first condition from the above definition (and using the same trick you could also violate the second).
8
so we can say that as long as customValue doesn't have internal state then the function returned by functionA is pure. Correct?
– pnknrg
Aug 22 at 2:50
I would say yes, as long ascustomValue
is constant. But you can also passmutator
as the argument to the returned function for the same kind of shenanigans. But would that still count as the "same input"? I don't know.
– CRice
Aug 22 at 2:55
@pnknrg Would reading from e.g. a stream be considered "internal state"? I think one could just stick with the Wikipedia definition to find thatfunctionA
is pure ifcustomValue
is pure.
– Max Langhof
Aug 22 at 9:46
As long as you have mutable data types like Object in JS you will not have pure functions. JS is just a toy language trying to implement functional programming paradigm. With primitive data types like String this might not be the case though.
– Redu
Aug 22 at 19:17
add a comment |Â
up vote
22
down vote
accepted
up vote
22
down vote
accepted
Using this definition of Pure Function:
In computer programming, a pure function is a function that has the
following properties:
Its return value is the same for the same arguments (no variation with
local static variables, non-local variables, mutable reference
arguments or input streams from I/O devices).
Its evaluation has no
side effects (no mutation of local static variables, non-local
variables, mutable reference arguments or I/O streams).
Then, no, functionA
will not always return a pure function.
Here is a way to use functionA
so that it does not return a pure function:
let functionA = (customValue) => 1;
return input => input * value;
;
class Mutater
constructor()
this.i = 0;
valueOf()
return this.i++;
const nonPureFunction = functionA(new Mutater());
// Produces different results for same input, eg: not pure.
console.log(nonPureFunction(10));
console.log(nonPureFunction(10));
As you can see, the returned function, when given the same input (10
), produces a different result. This violates the first condition from the above definition (and using the same trick you could also violate the second).
Using this definition of Pure Function:
In computer programming, a pure function is a function that has the
following properties:
Its return value is the same for the same arguments (no variation with
local static variables, non-local variables, mutable reference
arguments or input streams from I/O devices).
Its evaluation has no
side effects (no mutation of local static variables, non-local
variables, mutable reference arguments or I/O streams).
Then, no, functionA
will not always return a pure function.
Here is a way to use functionA
so that it does not return a pure function:
let functionA = (customValue) => 1;
return input => input * value;
;
class Mutater
constructor()
this.i = 0;
valueOf()
return this.i++;
const nonPureFunction = functionA(new Mutater());
// Produces different results for same input, eg: not pure.
console.log(nonPureFunction(10));
console.log(nonPureFunction(10));
As you can see, the returned function, when given the same input (10
), produces a different result. This violates the first condition from the above definition (and using the same trick you could also violate the second).
let functionA = (customValue) => 1;
return input => input * value;
;
class Mutater
constructor()
this.i = 0;
valueOf()
return this.i++;
const nonPureFunction = functionA(new Mutater());
// Produces different results for same input, eg: not pure.
console.log(nonPureFunction(10));
console.log(nonPureFunction(10));
let functionA = (customValue) => 1;
return input => input * value;
;
class Mutater
constructor()
this.i = 0;
valueOf()
return this.i++;
const nonPureFunction = functionA(new Mutater());
// Produces different results for same input, eg: not pure.
console.log(nonPureFunction(10));
console.log(nonPureFunction(10));
edited Aug 22 at 8:53
Toby Speight
14.9k133761
14.9k133761
answered Aug 22 at 2:33
CRice
9,8381228
9,8381228
8
so we can say that as long as customValue doesn't have internal state then the function returned by functionA is pure. Correct?
– pnknrg
Aug 22 at 2:50
I would say yes, as long ascustomValue
is constant. But you can also passmutator
as the argument to the returned function for the same kind of shenanigans. But would that still count as the "same input"? I don't know.
– CRice
Aug 22 at 2:55
@pnknrg Would reading from e.g. a stream be considered "internal state"? I think one could just stick with the Wikipedia definition to find thatfunctionA
is pure ifcustomValue
is pure.
– Max Langhof
Aug 22 at 9:46
As long as you have mutable data types like Object in JS you will not have pure functions. JS is just a toy language trying to implement functional programming paradigm. With primitive data types like String this might not be the case though.
– Redu
Aug 22 at 19:17
add a comment |Â
8
so we can say that as long as customValue doesn't have internal state then the function returned by functionA is pure. Correct?
– pnknrg
Aug 22 at 2:50
I would say yes, as long ascustomValue
is constant. But you can also passmutator
as the argument to the returned function for the same kind of shenanigans. But would that still count as the "same input"? I don't know.
– CRice
Aug 22 at 2:55
@pnknrg Would reading from e.g. a stream be considered "internal state"? I think one could just stick with the Wikipedia definition to find thatfunctionA
is pure ifcustomValue
is pure.
– Max Langhof
Aug 22 at 9:46
As long as you have mutable data types like Object in JS you will not have pure functions. JS is just a toy language trying to implement functional programming paradigm. With primitive data types like String this might not be the case though.
– Redu
Aug 22 at 19:17
8
8
so we can say that as long as customValue doesn't have internal state then the function returned by functionA is pure. Correct?
– pnknrg
Aug 22 at 2:50
so we can say that as long as customValue doesn't have internal state then the function returned by functionA is pure. Correct?
– pnknrg
Aug 22 at 2:50
I would say yes, as long as
customValue
is constant. But you can also pass mutator
as the argument to the returned function for the same kind of shenanigans. But would that still count as the "same input"? I don't know.– CRice
Aug 22 at 2:55
I would say yes, as long as
customValue
is constant. But you can also pass mutator
as the argument to the returned function for the same kind of shenanigans. But would that still count as the "same input"? I don't know.– CRice
Aug 22 at 2:55
@pnknrg Would reading from e.g. a stream be considered "internal state"? I think one could just stick with the Wikipedia definition to find that
functionA
is pure if customValue
is pure.– Max Langhof
Aug 22 at 9:46
@pnknrg Would reading from e.g. a stream be considered "internal state"? I think one could just stick with the Wikipedia definition to find that
functionA
is pure if customValue
is pure.– Max Langhof
Aug 22 at 9:46
As long as you have mutable data types like Object in JS you will not have pure functions. JS is just a toy language trying to implement functional programming paradigm. With primitive data types like String this might not be the case though.
– Redu
Aug 22 at 19:17
As long as you have mutable data types like Object in JS you will not have pure functions. JS is just a toy language trying to implement functional programming paradigm. With primitive data types like String this might not be the case though.
– Redu
Aug 22 at 19:17
add a comment |Â
up vote
1
down vote
Yes, the function that is returned, can be considered pure. The reason that it is considered pure, is because the function will always return the same output given the exact same input.
add a comment |Â
up vote
1
down vote
Yes, the function that is returned, can be considered pure. The reason that it is considered pure, is because the function will always return the same output given the exact same input.
add a comment |Â
up vote
1
down vote
up vote
1
down vote
Yes, the function that is returned, can be considered pure. The reason that it is considered pure, is because the function will always return the same output given the exact same input.
Yes, the function that is returned, can be considered pure. The reason that it is considered pure, is because the function will always return the same output given the exact same input.
answered Aug 22 at 2:30


Brandon Kirk
112
112
add a comment |Â
add a comment |Â
up vote
0
down vote
Your returned functions can be considered as pure function. In your example, you have effectively 4 different pure functions.
const pureFunc1 = functionA();
pureFunc1(4) // => returns 4
pureFunc1(4) // => returns 4
const pureFunc2 = functionA(2);
pureFunc2(4) // => returns 8
pureFunc2(4) // => returns 8
// ...
add a comment |Â
up vote
0
down vote
Your returned functions can be considered as pure function. In your example, you have effectively 4 different pure functions.
const pureFunc1 = functionA();
pureFunc1(4) // => returns 4
pureFunc1(4) // => returns 4
const pureFunc2 = functionA(2);
pureFunc2(4) // => returns 8
pureFunc2(4) // => returns 8
// ...
add a comment |Â
up vote
0
down vote
up vote
0
down vote
Your returned functions can be considered as pure function. In your example, you have effectively 4 different pure functions.
const pureFunc1 = functionA();
pureFunc1(4) // => returns 4
pureFunc1(4) // => returns 4
const pureFunc2 = functionA(2);
pureFunc2(4) // => returns 8
pureFunc2(4) // => returns 8
// ...
Your returned functions can be considered as pure function. In your example, you have effectively 4 different pure functions.
const pureFunc1 = functionA();
pureFunc1(4) // => returns 4
pureFunc1(4) // => returns 4
const pureFunc2 = functionA(2);
pureFunc2(4) // => returns 8
pureFunc2(4) // => returns 8
// ...
edited Aug 22 at 2:40
answered Aug 22 at 2:38


engineforce
1,1191112
1,1191112
add a comment |Â
add a comment |Â
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
StackExchange.ready(
function ()
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f51959041%2fhigher-order-function-returns-pure-function%23new-answer', 'question_page');
);
Post as a guest
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
5
There is healthy, meaningful discussion in the community about what "pure" means for functions. One (over?-)simplified definition is "no side effects"--no impact on variables/state outside the function scope that would make the function have different effects with the same input. Your functionA definitely meets that criterion. I say yes.
– Andy Taton
Aug 22 at 2:28
4
If you only consider reasonable input, i.e.
number
(or BigInt, now) – see CRice’s answer – then yes, it’s pure.– Ry-♦
Aug 22 at 2:42
2
Some kindly folks upvoted my comment, but it's clear I misinterpreted the question. You did not ask "Is functionA pure?", but rather "Is the function returned by functionA always pure, by virtue of functionA?" As someone else answers below, I think the answer to this second question is "no".
– Andy Taton
Aug 22 at 2:45
Puzzles in JS are hard to solve with many kinds of overloading available. (same for C++)
– user202729
Aug 22 at 7:30
For OP: Don't edit the answer into the question. If you want to answer post an answer.
– user202729
Aug 22 at 7:31