On Jul 6, 7:16 pm, David Sletten <da...@bosatsu.net> wrote: > Conrad, > > The syntax of 'cond' is actually pretty straightforward. Following the symbol > 'cond' you have pairs of predicate forms and consequent expressions. The > 'cond' form evaluates each predicate in turn until one evaluates to true and > then returns the value of the corresponding consequent form. Many 'cond' > forms have a default value that is returned when none of the predicates > succeed. Remember that in Clojure only the value 'false' and the value 'nil' > are considered false. Everything else is true. By convention we use the > keyword ':else' as a 'predicate' for the default case. Since ':else' is > neither 'false' nor 'nil', it is considered to be true, and if the 'cond' > form reaches the ':else' clause, then the default value will be returned. > > Given these restrictions, only a) and c) are syntactically correct. And even > they don't do what you want. > > > a) > > > (cond > > (= total 20) 8.75 > > (or (amount > 20) (= country "US") 9.75) > > (else 10.0)) > > Here we have: > predicate | consequent > (= total 20) | 8.75 > (or (amount > 20) (= country "US") 9.75) | (else 10.0) > > Unfortunately, (else 10.0) winds up as the consequent of the 2nd predicate. > Furthermore, 'else' is not a Clojure operator. Unless you've defined a > function or macro named 'else' you will get an error. > > > b) > > > (cond > > (= total 20) 8.75 > > (or (amount > 20) (= country "US") 9.75) > > :default 10.0) > > predicate | consequent > (= total 20) | 8.75 > (or (amount > 20) (= country "US") 9.75) | :default > 10.0 | ??? > > These are not paired up properly. > > > c) > > > (cond > > (= total 20) 8.75 > > (or (amount > 20) (= country "US") 9.75) > > 10.0 ) > > predicate | consequent > (= total 20) | 8.75 > (or (amount > 20) (= country "US") 9.75) | 10.0 > > Not what you expected... > > > > > d) > > > (cond > > (= total 20) 8.75 > > (or (amount > 20) (= country "US") 9.75) > > :else 10.0 ) > > predicate | consequent > (= total 20) | 8.75 > (or (amount > 20) (= country "US") 9.75) | :else > 10.0 | ??? > > Not syntactically correct. > > Here's what you want to use: > (cond > (== total 20) 8.75 > (or (> amount 20) (= country "US")) 9.75 > :else 10.0) > > (Note that '==' is the proper predicate for numerical equality.) >
Is this true for comparing integer values? I ask this question because I read the following in the documentation: http://clojuredocs.org/clojure_core/clojure.core/= -Conrad > Have all good days, > David Sletten -- 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