Functional Programming
- Code that is declarative
- The program is a series of declarations
- There is no changing of state or mutable data
- Functional programming is a subset of declarative programming
- It sees the world as a collection of mathematical functions
- The result of a function depends only on its arguments
What is a function?
- A function is a mathematical expression that will always give the same output when presented with the same inputs.
Why functional programming?
- It is more robust
- It is easier to reason about
- Less prone to errors
- Has no side effects, even as the code base increases
Features of functional programming
- Concurrency
- Lazy evaluation
- Recursion
- Data is immutable
Partial Evaluation
-
This is an optimisation method used to improve the performance of a program
-
Consider a function with two inputs
find name scores
- This is intended to find the scores from the list scores for the person named by the variable name in a database of names
- The link between them might be candidate_id
-
With a partial evaluation this can be converted into two function calls, the total processing effort for the two calls is less than the time to process the single, more complicated call.
- So, in our example we might break this down into two stages - the first where we find the name in the database, and the second where we find the scores.
- The performance boost comes because we might be able to pre-process the first stage - partial evaluation of the whole expression.
-
This works best if one of the inputs can be fixed.
- At run time we might know one of the values and it will not change during this execution.
- Think about a date, for example.
- So, before we get the command, we can do the required processing that the “date” part of the operation depends on.
- At run time we might know one of the values and it will not change during this execution.
-
Consider the command
add 2 age
-
We know that the function always adds 2.
-
So lets create a temporary function called
add2
. -
When we get to this command in the code we don’t run it, we run:
-
add2 age
-