gpt4 book ai didi

clojure - 按契约(Contract)库为 Common Lisp 设计?

转载 作者:太空宇宙 更新时间:2023-11-03 18:34:30 24 4
gpt4 key购买 nike

我有 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 中是否有类似的前置/后置功能和/或更全面的契约设计库?

谢谢

最佳答案

编写一个可以像这样使用的宏相对简单:

(defun sqr (n)
(with-dbc-checked
(:pre ((not (zerop n)) (numberp n))
:post ((plusp %) (numberp %)))
(* n n)))

对于 CLOS 通用函数,请参见此处:http://www.muc.de/~hoelzl/tools/dbc/dbc-intro.html

顺便说一句,从这段代码可以看出,CL 和 Clojure 之间的代码交换可能为零,无需完全重写任何内容。

关于clojure - 按契约(Contract)库为 Common Lisp 设计?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3787980/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com