Разработка контрактной библиотеки (-ов) для Common Lisp?

Исходя из опыта работы с Clojure, я понимаю, что его предварительные / пост-условия обеспечивают основу для разработки по контракту:

;; sqr.clj

(defn sqr [n]
  {:pre  [(not= 0 n) (number? n)]
   :post [(pos? %) (number? %)]}
  (* n n))

(sqr 10)
;=> 100

(sqr 0)
; Assertion error

Есть ли в Common Lisp аналогичная возможность до / после и / или более обширную библиотеку Design by Contract, доступную в дикой природе?

Спасибо

9
задан fogus 24 September 2010 в 14:22
поделиться