Hi Leon,
thanks a lot for your explanation that a "regex-op outside of a regex-op
always specs a collection". Then the behaviour is indeed clear
Best regards
Marc
Am Sonntag, 29. Januar 2017 00:32:14 UTC+1 schrieb Leon Grapenthin:
>
> Hi Marc,
>
> note that the return of gen/sample is 10 examples. Each one is a
> collection.
>
> So the collection [] matches your spec, as does [:c]. And so on.
>
> A regex-op outside of a regex-op always specs a collection. If used within
> another regex-op, it just specs an element.
>
> To illustrate:
> (gen/sample (s/gen (s/cat :kw (s/? #{:a :b :c :d})) :num number?))
>
> ((-2.0) (:a -3.0) (0) (1) (-2.625) (:a -1) (:d -1.5625) (0.75) (:a -24)
> (:d -22))
>
>
> Kind regards,
> Leon.
> On Saturday, January 28, 2017 at 6:29:39 PM UTC+1, Marc Wilhelm Küster
> wrote:
>>
>> Good afternoon,
>>
>> like obviously quite a few others on this list I am looking into the
>> upcoming (and IMHO absolutely great) clojure.spec
>> During this I noted that the ? macro seems to behave differently from
>> what I would have naively expected from its documentation (cf.
>> https://clojure.github.io/clojure/branch-master/clojure.spec-api.html#clojure.spec/?
>> ):
>>
>> ? macro
>>
>> Usage: (? pred-form)
>>
>> Returns a regex op that matches zero or one value matching
>> pred. Produces a single value (not a collection) if matched.
>>
>>
>> In contract, with the namespaces set to
>> [clojure.spec :as s]
>> [clojure.spec.gen :as gen]
>>
>> the following snippet
>>
>> (s/def ::abcd #{:a :b :c :d})
>> (gen/sample (s/gen (s/? ::abcd)))
>>
>> returns a collection of collections:
>> ([] [:c] [:d] [:b] [:b] [] [:a] [] [:d] [])
>>
>> I would have expected to find either the value itself or nothing, a
>> behaviour that would seem to me also more practical when composing larger
>> records with optional elements. However, I might be misreading the
>> documentation and would be grateful for any clarification
>>
>> Best regards,
>>
>> Marc
>>
>>
--
You received this message because you are subscribed to the Google
Groups "Clojure" group.
To post to this group, send email to [email protected]
Note that posts from new members are moderated - please be patient with your
first post.
To unsubscribe from this group, send email to
[email protected]
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 [email protected].
For more options, visit https://groups.google.com/d/optout.