It looks like you’ve got your #s misplaced. I think you want something like this:
(s/and #(> % 0.0) #(< % 1.0)) Of course, the first predicate expression could be replaced by `pos?`. The `s/and` returns a single spec that combines multiple specs. Of course, `clojure.core/and` is basically the logical AND of “truthy” values. The #(…) form is creating an anonymous function. In your first case, that creates a reasonable predicate, which works correctly as a spec. Your second form isn’t doing what you wanted because the anonymous function notation is wrapping the whole `s/and` combining form, and in that context the tests aren't syntactically the appropriate predicates. You’re getting an extra level of nesting and bad tests. I suspect that the confusion comes from the similarity between a predicate and a spec. In a sense, a predicate function is the simplest form of a spec. However, you need a special way of combining multiple specs, not just the plain logical `and` combination. So we have `s/and` to do the job. > On Jul 21, 2016, at 1:23 PM, Mars0i <marsh...@logical.net> wrote: > > With Clojure 1.9.0-alpha10: > > user=> (s/def ::interval-with-cloj-and #(and (> % 0.0) (< % 1.0))) > > user=> (s/def ::interval-with-spec-and #(s/and (> % 0.0) (< % 1.0))) > > user=> (s/valid? ::interval-with-cloj-and 1.0) > false > > That's what I expected. > > user=> (s/valid? ::interval-with-spec-and 1.0) > true > > That's not what I expected. > > In fact, as far as I can tell, (valid? ::interval-with-spec-and x) will > return true for any number x. What does spec/and mean, then? I thought that > in this context it would mean the same as Clojure's normal 'and'. That's > what the first example of its use in the Clojure.spec Guide seems to show. I > must be misunderstanding something basic and perhaps obvious. -- You received this message because you are subscribed to the Google Groups "Clojure" group. To post to this group, send email to clojure@googlegroups.com Note that posts from new members are moderated - please be patient with your first post. To unsubscribe from this group, send email to clojure+unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/clojure?hl=en --- You received this message because you are subscribed to the Google Groups "Clojure" group. To unsubscribe from this group and stop receiving emails from it, send an email to clojure+unsubscr...@googlegroups.com. For more options, visit https://groups.google.com/d/optout.