IMO there are two main large groups of programming languages: those describing how to solve a problem and those describing the problem to solve itself.
That's my definition of declarative vs dynamic languages. A declarative language only describe what the problem is and in which context we are, then let an engine interpret these descriptions to act accordingly. There is no "logic" in the sense that in a declarative language, there is no "execution flow".
Dynamic languages, on the other hand, are much more generic: they don't describe what the problem is, they are used to express how to solve the problem. In a sense, they are closer to the hardware: you will need a