One that comes to mind is rule-based programming also referred to as term rewrite languages. It goes like this:
You specify a bunch of replacement or rewrite rules. Some may be automatically applied while others need to be applied explicitly. Then you start with an initial expression. Implicit and explicit transformations are applied and may be explicitly, implicitly and/or repeatedly applied till the expression no longer changes. What remains is the 'answer' or 'answers'. 'Answers' because some rewrite languages can lead to unexpected multiple answers depending on the order of rule application. In this context, 'answers' may be alternative sets (represented in various standard ways) of alternative answers, each being the result of a different alternative but perhaps conflicting 'trajectory'. Think arithmetic without specifying an evaluation order such as PEMDAS.
Rule-based programming shares some aspects of functional programming and some of logic programming. Rule-based programming can lead to extremely (ridiculously) short, terse programs but may be quite difficult to debug.
The Wolfram language (Mathematica) allows you to write programs or part of programs using this style. Other less well-known languages include ELAN and Miranda.