@wim_v12e it's kind of a wibbly wobbly category, but yeah.
A concatenative language is completely associative: you can group words within it anyhow you'd like, and maintain the same semantics. A pure functional language is referentially transparent: if two complete expressions have the same semantics, they can be interchanged without changing the program semantics. The functional language, however, requires "complete expressions"; the concatenative language doesn't.
@neauoire What does it mean to have "complete expressions"? Referential transparency refers to the names. If something is not named in an expression, it does not affect referential transparency.
Can you give an example of an expression that is incomplete, but is acceptable for in concatenative language?