Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Why is printf() an impure function?

As far as I know, impure functions are those which do not always return the same value when called with the same parameters (I must be missing something, or may be wrong, correct me if I am).

So why is printf() considered to an impure function?

like image 373
cirronimbo Avatar asked Aug 12 '12 05:08

cirronimbo


1 Answers

A "pure" function lacks side-effects too.

In other words, no matter how many times you call it, a pure function will affect nothing other than its output.

For example, foo is impure, even though it return zero:

int x;
int foo() { x++; return 0; }
int bar() { return x; }

If foo were pure, calling it would not affect the result of bar().

printf is impure because its result has "side effects" -- specifically, it prints something on the screen (or in a file, etc).
If it were pure, then you could call it a billion times and be sure nothing bad would happen.
But if you actually call printf a million times, there certainly is a difference to the user -- it fills up his screen (or disk space, or whatever). So clearly it's not pure.

Furthermore: If your output was redirected to be your own input (somewhat useless, but still), then calling printf would affect what you would receive from getchar. :) So it's directly observable that way, too.

like image 88
user541686 Avatar answered Sep 27 '22 23:09

user541686