I forgot to mention that if you run this with alpha2, this example won't 
work due to a bug, but that is fixed in master for alpha3.

On Wednesday, May 25, 2016 at 2:38:07 PM UTC-5, Alex Miller wrote:
>
> s/or creates a spec and s/alt creates a regex op. Regex ops can be 
> combined to describe a single sequence. Use s/alt if you are matching 
> alternative regex expressions in a sequential context - in particular where 
> the branches of the alt are themselves regex ops. Use s/or when matching a 
> single item. There are indeed cases where you could use one or the other 
> and even yield the same result, but they have different affordances and 
> intent when used in combination with other things.
>
> This is an example where s/alt decides between nested regex ops (and s/or 
> won't work here):
>
> user=> (s/def ::s (s/* (s/alt :key-pair (s/cat :a keyword? :b keyword?)
>                               :nums (s/+ number?))))
> :user/s
> user=> (s/conform ::s [:a :b 1 2 3 :c :d :e :f 4 5])
> [[:key-pair {:a :a, :b :b}] [:nums [1 2 3]] [:key-pair {:a :c, :b :d}] 
> [:key-pair {:a :e, :b :f}] [:nums [4 5]]]
>
> If we tried this with an s/or, it would try to match a new regular 
> expression under the or and fail:
>
> user=> (s/def ::s' (s/* (s/or :key-pair (s/cat :a keyword? :b keyword?)
>                               :nums (s/+ number?))))
> :user/s'
> user=> (s/conform ::s' [:a :b 1 2 3 :c :d :e :f 4 5])
> :clojure.spec/invalid
>
> And you would instead match something like this:
>
> user=> (s/conform ::s' [[:a :b] [1 2 3] [:c :d] [:e :f] [4 5]])
> [[:key-pair {:a :a, :b :b}] [:nums [1 2 3]] [:key-pair {:a :c, :b :d}] 
> [:key-pair {:a :e, :b :f}] [:nums [4 5]]]
>
>
> On Wednesday, May 25, 2016 at 12:48:05 PM UTC-5, Brent Millare wrote:
>>
>> What's the difference between clojure.spec/or and clojure.spec/alt? They 
>> seem to accept the same inputs, multiple keyword-predicate pairs, and 
>> output tagged values when used with clojure.spec/conform. Is 
>> clojure.spec/or usable within a regular expression?
>>
>

-- 
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.

Reply via email to