我有这个功能:
(defn executa-peso-individuo
[estado-individuo transicao-individuo]
(def tipos-transicoes-peso #{:troca-peso :mesmo-peso})
(def tipos-estados-peso #{:d :e})
{:pre [(contains? tipos-transicoes-peso
(:peso transicao-individuo))
(contains? tipos-estados-peso
(:peso estado-individuo))]
...
先决条件不起作用。不知何故,vars tipos-transicoes-pes和tipos-estados-peso在前置条件代码中创建了一个bug。 我知道我可以将这些变量放在我的功能之外以使其工作。但我想将这些定义保留在我的功能中。我怎么能这样做?
答案 0 :(得分:5)
为了使条件前和后条件图像被识别,它必须紧跟参数向量。请参阅http://clojure.org/special_forms#toc10。
尽管不是很常见的打包方法,但是将defn
包裹在let
(let [tipos-transicoes-peso #{:troca-peso :mesmo-peso}
tipos-estados-peso #{:d :e}]
(defn executa-peso-individuo
[estado-individuo transicao-individuo]
{:pre [(contains? tipos-transicoes-peso
(:peso transicao-individuo))
(contains? tipos-estados-peso
(:peso estado-individuo))]
...
一般情况下,仅为顶级使用保留def
和defn
。在顶级let
内是可以的,但同样,不常见。但是,绝对不要像在你的例子中那样在函数体内部使用。
答案 1 :(得分:0)
你放错了条件。他们应该追求函数的param向量。
(defn fun [param-1 param2]
{:pre [ ]
:post [ ]}
;; body goes here
)