Lisp is both dynamically and statically typed:<p><pre><code>    (defun foo (x y)
      (declare (type (integer 1 12) x)
               (type character y))
      (make-string x :initial-element y))
</code></pre>
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.<p>In fact, you might even say that it&#x27;s statically typed since values which have undeclared types are really of type T, but I don&#x27;t think I&#x27;d go that far.