LINUX.ORG.RU

История изменений

Исправление den73, (текущая версия) :

И даже ещё проще:

(defun BAR2 (X)
  (declare (type NUMBER X))
  (let ((Y X))
    (declare (type FIXNUM Y))
    Y))

(defun BAR3 (X)
  (declare (type (or NUMBER NULL) X))
  (let ((Y X))
    (declare (type NUMBER Y))
    Y))
Предупреждений нет. Мне кажется естественным такое: если мы сужаем тип от * до чего-то иного, то предупржедения нет (да и то нужна опция, чтобы оно было, чтобы писать полностью типизированный код). Если мы сужаем тип от не * до более узкого не *, то нужно требовать хотя бы the. Тогда можно будет говорить, что статическая типизация в SBCL имеет какой-то смысл. А так это пока что решето.

Вся существенная инфа о системе типов получена из мануала по CMU CL.

Исходная версия den73, :

И даже ещё проще:

(defun BAR2 (X)
  (declare (type NUMBER X))
  (let ((Y X))
    (declare (type FIXNUM Y))
    Y))

(defun BAR3 (X)
  (declare (type (or NUMBER NULL) X))
  (let ((Y X))
    (declare (type NUMBER Y))
    Y))