Lisp is both dynamically and statically typed:
(defun foo (x y)
(declare (type (integer 1 12) x)
(type character y))
(make-string x :initial-element y))
And the compiler will provide a compile-time error if someone tries to call (foo 1 2) but will accept (foo 1 #\a). Even cooler, it will provide a compile-time if the developer tries to call foo with a first argument which is not provably an integer from 1 to 12.In fact, you might even say that it's statically typed since values which have undeclared types are really of type T, but I don't think I'd go that far.