A lot of people echo the fact that learning Lisp teaches you a lot of concepts in computer science. I was confused with choosing a particular implementation of Lisp (tried a bunch) and felt lazy to skim through the tutorial or documentation of each of those implementations of Lisp. Finally, I just decided to read the R5RS paper (A paper about Scheme). And I'm excited to say that I learnt something new while just reading the Overview section of the paper.
Scheme has latent as opposed to manifest types
And that caught my eye. A bit of searching led me here, which explains Latent type systems in a really simple way.
From my understanding of that awesome piece of explanation, labeling Lisp as a dynamically-typed language is very mis-leading.
"Latent" describes types from a syntactic perspective while the terms "Dynamic" or "Static" describes types from a run-time perspective.
And I'm sure that's confusing. Consider the following variable in Java:
String name;
(Yes! Java is static). And not latent. But the following is latent.
(define x 1)
You don't say it's of a particular type. The interpreter or compiler understands it and plays it's own game (static or dynamic). Now this might be dynamic or static in run-time, but just look at the syntax. It's LATENT :)
P.S: I guess a language like ruby is an example for having latent type system. But do correct me if I'm wrong. Really waiting for someone into Lisp to say if that's right.