Metalinguistic abstraction
In computer science, metalinguistic abstraction is the process of solving complex problems by creating a new language or vocabulary to better understand the problem space. It is a recurring theme in the seminal MIT textbook, the Structure and Interpretation of Computer Programs, which uses Scheme as a framework for constructing new languages.
Explanation
For example, consider modelling an airport inside a computer. A procedural (e.g. C) programmer would create data structures to represent the elements of an airport and functions to operate on those data structures. An object-oriented (e.g. C++) programmer would create objects to represent the elements of the airport with methods which represent their behaviors. A functional (e.g. Scheme) programmer would create functions representing both elements and behaviors of the airport. A metalinguistic programmer would abstract the problem by creating a new language for modelling an airport with its own primitives and operations. The language could then encompass any or all of the above techniques as required by the problem at hand.
Because the creation of functional metalinguistic abstractions in non-functional languages can be cumbersome and also because of the syntactic flexibility of functional macros, metalinguistic programming is most often performed on a functional base.