Paradigm is "substitute" - either substitute nothing (let the raw text go through), or substitute something (affect the output in some way).
Combining all the answers and comments:
(a) TeX is a markup, and so therefore a subset of SGML.
(b) It is an implicit loop ("read until the end of the file") and an implicit command ("print"); everything else happens inside that.
(c) Its print-control ability is very similar to DCF, and its job-control ability is similar to JCL.
(d) It can be mapped to a combination of html, css, javascript, a file i/o method, and command line/batch.
(e) Its macro-expansion ability is akin to the SAS macro processor: SAS macros produce and control SAS code; TeX macros produce and control print output; both mix macros and non-macro material; and both expand their macros until either primitives or code/text is reached.
(f) In a spreadsheet, if I do a formula, '=if(a1="",substitute(a2,"#1",b2),"")' - if cell a1 is empty, replace the characters '#1' in the content of cell a2 with whatever the content is in cell b2, otherwise do nothing" - is TeX technique.
(g) It is self-defining and extensible and can interface with other input/output, which implies there is no linguistic 'border'.
Packages and commands not only can add extra functionality, they can do so by re-defining the meaning of existing packages and commands, including themselves.
(h) In turn, this implies that TeX is more a 'structure' or a system rather than a syntactic 'language', and indeed an instruction "\X" (or "qΨ") in one document may or may not be incompatible with instructions {or their grammar) in another document. Moreover, grammaticality and syntactic correctness can be re-defined (or even un-defined).
(i) This define-ability implies that each document is in effect its own 'language'.
Perhaps what is happening is that the presence of raw text is easily classified as 'not part of the language' and focus is given to explicit commands because they are visibly marked with an escape character. But the implicit commands (loop, print), which are analagous to -0 case endings in declensions in linguistics, are also part of the picture. Nothing will 'happen' if there is nothing to print.
The explicit commands have only one purpose: to modify how and when the implicit commands do their job, or do their job on. That is another way of saying "markup".
(j) Therefore the original description, "TeX is a document preparation system", is still most apt.
(k) TeX is a superset of language.
\lowercase, until for some unknown reason it kinda compiles, most of the time” paradigm. This is another reason to support LuaTeX, which finally gives TeX a proper, predictable, consistent programming language. – Gaussler Jun 26 '21 at 15:50\fooand\bazwere functions, then\foo{\baz{Hello World}}would evaluate\baz{Hello World}first, then plug the result into\foo. Then\foowould only ever see the output of\baz{Hello world}, not the actual code itself. But since they are macros, the evaluation is kinda happening in the opposite order, i.e. from the outside and in. Is that right? – Gaussler Jun 26 '21 at 15:59 by the character U+00A0 for example. – David Carlisle Jun 26 '21 at 16:21