Referential transparency
We appreciate the virtues of caching, but we do this to look at referential transparency, a cornerstone of functional programming.
In the preceding example, note that we are able to cache the results, as the results of the computation are not going to change for the same input. We need not repeat the computations; instead, we could compute the answer once and save and substitute it.
In the FP world, where we can substitute a function by its value, the function is called referentially transparent. Just like we avoid repeated calls in the previous algorithm, repeated calls to such functions could be avoided by caching the result.
Mathematical functions are referentially transparent. For example, the following Clojure functions are referentially transparent:
user=> (* 3 4) 12 user=> (apply + [1 2 3 4 5 6]) 21
You will always get 21
when you add up 1
,2
,3
,4
,5
, and 6
. Multiplying 3
and 4
will always give the result 12
.
Note
Note that the preceding functions are pure...