Re: Spec: Nested Cat Calls
That worked - thank you! On Tuesday, May 16, 2017 at 11:38:08 PM UTC-5, Alex Miller wrote: > > The problem here is that s/or is NOT a regex op and introduces a new level > of spec nesting. Try using s/alt (which IS a regex op) instead. > > > On Tuesday, May 16, 2017 at 11:34:10 PM UTC-5, Alexander Sedgwick wrote: >> >> I'm looking to better understand how nested cats work (now that just >> sounds funny). >> >> I've found that sometimes spec/cat will generate a nested list: >> >> ```clojure >> (gen/sample (s/gen (s/cat :start #{\a} >> :content (s/cat :nothing (s/? >> #{\^}) >> :fruit (s/or >> :apples (s/+ (s/cat :skin #{\s} >> >> :flesh #{\f} >> >> :core #{\c})) >> >> :bananas (s/+ #{\b}))) >>:end #{\z})) 5) >> ``` >> -> ((\a \^ (\s \f \c) \z) ... (\a \^ (\b \b) \z)) >> >> Given the sample output we can assume this validate call will be false >> (provided flat list): >> >> ```clojure >> (s/valid? (s/cat :start #{\a} >>:content (s/cat :nothing (s/? #{\^}) >> :fruit (s/or :apples (s/+ >> (s/cat :skin #{\s} >> >> :flesh #{\f} >> >> :core #{\c})) >> :bananas (s/+ >> #{\b}))) >>:end #{\z}) [\a \^ \s \f \c \z]) >> ``` >> -> false >> >> I thought the s/spec function would need to be used to define nested >> structures (s/spec (s/cat ...)). >> >> Is this expected behavior or is there a better approach for working with >> flat lists? >> >> Thanks! >> > -- 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.
Re: Spec: Nested Cat Calls
The problem here is that s/or is NOT a regex op and introduces a new level of spec nesting. Try using s/alt (which IS a regex op) instead. On Tuesday, May 16, 2017 at 11:34:10 PM UTC-5, Alexander Sedgwick wrote: > > I'm looking to better understand how nested cats work (now that just > sounds funny). > > I've found that sometimes spec/cat will generate a nested list: > > ```clojure > (gen/sample (s/gen (s/cat :start #{\a} > :content (s/cat :nothing (s/? #{\^}) > :fruit (s/or > :apples (s/+ (s/cat :skin #{\s} > > :flesh #{\f} > > :core #{\c})) > > :bananas (s/+ #{\b}))) >:end #{\z})) 5) > ``` > -> ((\a \^ (\s \f \c) \z) ... (\a \^ (\b \b) \z)) > > Given the sample output we can assume this validate call will be false > (provided flat list): > > ```clojure > (s/valid? (s/cat :start #{\a} >:content (s/cat :nothing (s/? #{\^}) > :fruit (s/or :apples (s/+ > (s/cat :skin #{\s} > > :flesh #{\f} > > :core #{\c})) > :bananas (s/+ > #{\b}))) >:end #{\z}) [\a \^ \s \f \c \z]) > ``` > -> false > > I thought the s/spec function would need to be used to define nested > structures (s/spec (s/cat ...)). > > Is this expected behavior or is there a better approach for working with > flat lists? > > Thanks! > -- 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.
Spec: Nested Cat Calls
I'm looking to better understand how nested cats work (now that just sounds funny). I've found that sometimes spec/cat will generate a nested list: ```clojure (gen/sample (s/gen (s/cat :start #{\a} :content (s/cat :nothing (s/? #{\^}) :fruit (s/or :apples (s/+ (s/cat :skin #{\s} :flesh #{\f} :core #{\c})) :bananas (s/+ #{\b}))) :end #{\z})) 5) ``` -> ((\a \^ (\s \f \c) \z) ... (\a \^ (\b \b) \z)) Given the sample output we can assume this validate call will be false (provided flat list): ```clojure (s/valid? (s/cat :start #{\a} :content (s/cat :nothing (s/? #{\^}) :fruit (s/or :apples (s/+ (s/cat :skin #{\s} :flesh #{\f} :core #{\c})) :bananas (s/+ #{\b}))) :end #{\z}) [\a \^ \s \f \c \z]) ``` -> false I thought the s/spec function would need to be used to define nested structures (s/spec (s/cat ...)). Is this expected behavior or is there a better approach for working with flat lists? Thanks! -- 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.