What Lisp is lacking though is type declarations for variables, method parameters and returned values. These make codebases immensely more readable.
A usual type declaration looks like this:
(defun month-name (month) (declare (type (integer 1 12) month)) (the string (ecase month (1 "Jan") (2 "Feb") (3 "Mar") (4 "Apr") (5 "May") (6 "Jun") (7 "Jul") (8 "Aug") (9 "Sep") (10 "Oct") (11 "Nov") (12 "Dez"))))
(declaim (ftype (function ((integer 1 12)) ; the parameter list string) ; the return value month-name)) ; the function name
CL-USER 1 > (defmethod add ((a integer) (s string)) (+ a (parse-integer s))) #<STANDARD-METHOD ADD NIL (INTEGER STRING) 402005B1C3> CL-USER 2 > (add 12 "23") 35
What Lisp is lacking though is type declarations for variables, method parameters and returned values. These make codebases immensely more readable.