A higher-order function accepts functions as arguments and is able to return a function as its result
A higher-order language supports higher-order functions and allows functions to be constituents of data structures