0

我有这个功能:

 (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))]
   ...

先决条件不起作用。不知何故,变量tipos-transicoes-pes 和tipos-estados-peso 在前置条件代码中创建了一个错误。我知道我可以将这些变量放在我的函数之外以使其工作。但我想将这些定义保留在我的函数中。我怎样才能做到这一点?

4

2 回答 2

5

为了这样识别前置条件和后置条件映射,它必须立即跟随参数向量。请参阅http://clojure.org/special_forms#toc10

一种可以接受但不是很常见的打包方式是将你defnlet

 (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))]
     ...

一般来说,保留defdefn仅供顶级使用。在顶级内部let是可以的,但同样,并不常见。但是,绝对不要像您的示例那样在函数体内使用。

于 2014-02-12T19:30:31.833 回答
0

你放错了条件。他们应该追求函数的参数向量。

(defn fun [param-1 param2]
{:pre  [ ]
 :post [ ]}
 ;; body goes here
)
于 2014-02-12T19:28:51.047 回答