Dynamic Type Checking
Dynamic type checking, used in Lisp, checks types at runtime before operations are performed on data.
(defun copy-tree (x) (if (consp x) (cons (copy-tree (first x)) (copy-tree (rest x))) x))
Common Lisp combines dynamic type checking with optional type declarations to allow compilation of code using static checks.