λ-calculus performs computation using mathematical functions. The notation used is called Lambda Abstraction. Many procedural languages (which are not based on λ-calculus) treat data variables and functions differently. For example, we can't assign a function to another function like we usually do with variables (function pointers are different!). On the other hand, functional programming languages (for example Haskel) which are based on λ-calculus treat data variables and functions as same. Of course, there are other differences but those are not relevant for this discussion.