Dans la documentation des formulaires spéciaux Clojure (http://clojure.org/special_forms) l'exemple pour :pre
et :post
ressemble à ceci:Ambiguïté Clojure attribut carte
(defn constrained-sqr [x]
{:pre [(pos? x)]
:post [(> % 16), (< % 225)]}
(* x x))
Comment peut-Clojure dire si la carte contenant les méta-données ne sont pas la définition de la fonction? Les méta-données ne devraient-elles pas précéder le vecteur params? Selon la documentation defn
(http://clojure.github.com/clojure/clojure.core-api.html#clojure.core/defn), la syntaxe est
(defn name doc-string? attr-map? [params*] body)
avec le attr-map?
avant le vecteur params. N'est-ce pas plus correct:
(defn constrained-sqr
{:pre [(pos? x)]
:post [(> % 16), (< % 225)]}
[x]
(* x x))
Devrais-je déposer un rapport de bogue ou est-ce que je le lis mal?
Désolé pour choisir lentes.
La documentation de 'defn' est-elle incorrecte? – Ralph
@Ralph: non. Les docs 'defn' parlent des métadonnées de la fonction (en fait: le Var contenant la fonction). Les conditions vont aux métadonnées du vecteur d'argument, pas à celle de la fonction. Comme je l'ai dit: les conditions dépendent des arguments. Cela n'a aucun sens de les attacher à la fonction elle-même. – kotarak
Ahh! Je vois maintenant. Les ': pre' et': post' sont des pré et post-conditions sur la valeur de 'x'. Bien sûr, ils doivent suivre. – Ralph