Firstly let me just say that I really enjoy this conversation, ergo I thank
you!


On Thu, May 23, 2013 at 9:00 PM, Michał Marczyk <michal.marc...@gmail.com>wrote:

> On 23 May 2013 18:30, atkaaz <atk...@gmail.com> wrote:
> > when you say the word "false" I'm assuming you're referring to "false?"
> the
> > function (not "false" the boolean value), otherwise I don't understand
>
> I mean false-the-Boolean-value.
>
> To rephrase the point I was making previously, "(false x) is a truthy
> value for any x in []" is a true sentence, indeed trivially so because
> [] is empty. Thus (every? false []) returning true totally makes
> sense.
>
> Alright, I see what you mean and you are right. But let's just state some
assumptions(which I see as conventions):
- the system that you're using (be it logic or mathematics or whatever it
is) to evaluate that that proposition is truthy  is assuming(without
checking) that the components are correct (such as "false" being a pred)
- when the collection is empty -> returns true   (this is a convention imho)
  I see this system as being incomplete/incoherent/inconsistent(or insert
the right word here) because of those.
"(false x) is a truthy value for any x in []"
so that is a true sentence as you say, in this system(can I call it logic?
or whatever you call it really) of evaluation which you can collapse to the
implementation of "every?" as it is now in clojure. You may even say that
the implementation of "every?" was based on that(doesn't matter). But I say
that system is "wrong" xD so to speak, "wrong" as in
incomplete/inconsistent and may work somewhere else (in non-programming
environments ie. on paper) where assuming that the input is valid is the
norm /the only thing happening.
 In a programming environment, for me it doesn't make sense to can call or
evaluate something that has (at least one) inconsistent components
(inconsistent based on its own definition).
=> (every? 1 [])
true

 So it is truthy as you say, but that doesn't mean anything other than it
is so(by convention/definion of) in this or that specific system(logic? or
the impl. of "every?" in clojure)
 That may be acceptable to clojure community or to ppl who want to get work
done, but not to (some) people who want/care for a consistent(ly defined)
system. Ok, sure, I'm free to implement any constrains on top of that but
if they were already implemented I couldn't get rid of them: I'll grant you
that reasoning for keeping it the way it is now. But it's little
things(inconsistencies I'll call them) like this which will make way for
bugs which can be hard to track down. There's no guarantee that someone
sometime will pass the wrong param either being aware of it or not and
depending on the case it may go unnoticed and/or throw in a different place
which seems quite unrelated to where the bug actually is.
  Anyway, I'm lingering, simply put: you're right   using your system of
evaluation, but not when using mine; mine says: make sure everything is
consistent within its own definition (so "1" above must be checked if it
really fits the "pred" pattern (ie. is that a pred; is the entire
proposition(or call) syntactically&semantically valid), if it doesn't the
the entire call is invalid and should/will throw) and I will add to that:
 that if the collection is empty then also throw, for it doesn't make
sense(to me) to check an empty collection (which you sort of assume is non
empty by the name "every?") for a predicate, and therefore you are kind of
forced to use a convention(aka "if empty return true") if you want to not
throw in this case. (yep I would really throw on empty collection, for if
you got to where you accidentally called every? on an empty collection
you're way past the point in the caller where you should've checked for an
empty collection anyway - that is, if you care about handling all(or most?)
cases for the purpose of your program being consistent)


So, assuming non-empty collections are the norm, we get an exception
> either way -- would having the exception come from every? rather than
> the attempt to call the not-really-a-predicate object be of much help
> in debugging?
>
I find it would be more consistent to throw from every? as if it makes the
check that all its inputs are correct (so making sure pred is a pred ie. a
fn  and not a value - that can't be used as a pred at least like a :keyword
could)
And also, as I said above, I'd throw when empty collection too (but that's
never gonna happen in clojure, I understand that especially because of what
John D. Hume said in an above post - makes sense(if you want to get things
done especially), but that is not my way(hence why I got nothing done so
far - so the joke's on me :) ))

wait, shouldn't this work?
=> (:a {:a 1})
1
=> *(every? :a {:a 1})*
false
=> (coll? {:a 1})
true


;well at least this one works:
=> (every? {:a 1} [:a])
true
=> ({:a 1} :a)
1
;so I'm probably missing something


> Cheers,
> M.
>
> Cheers & thank you for this great interaction!

>
> >
> > so like: "What matters is that false? returns truthy values when called
> with
> > any members of []"
> > makes sense to me.
> >
> > So all I was saying above is that it should throw when [] is empty just
> as
> > it does when [] is not empty, but it doesn't throw when empty because
> it's
> > never called (by "it" i mean "false" not "false?")
> >
> > => (type false)
> > java.lang.Boolean
> > => (type false?)
> > clojure.core$false_QMARK_
> > => (fn? false)
> > false
> > => (fn? false?)
> > true
> >
> > But really, if you were not talking about "false?" then I don't get it
> (??)
> >
> >
> > On Thu, May 23, 2013 at 4:48 PM, Michał Marczyk <
> michal.marc...@gmail.com>
> > wrote:
> >>
> >> Whether (false 1) or (false true) is truthy is irrelevant. What
> >> matters is that false returns truthy values when called with any
> >> members of [], which is of course the case, as [] has no members. (For
> >> it not to be the case, there would have to exist an x in [] for which
> >> (false x) were not truthy -- clearly there is no such x.)
> >>
> >> This is the same story as with quantification restricted to the empty
> set:
> >>
> >>   \forall x \in \emptyset . \phi(x)
> >>
> >> is true regardless of what \phi is, and intimately related to how
> >> implication works in classical logic (since the above is shorthand for
> >> a formula involving implication):
> >>
> >>   x -> y
> >>
> >> is true when x is false, regardless of what value y takes. (It's also
> >> true when y is true, regardless of what value x takes; this, however,
> >> is not relevant here.)
> >>
> >> Cheers,
> >> M.
> >>
> >>
> >> On 23 May 2013 06:31, atkaaz <atk...@gmail.com> wrote:
> >> > Well, seems to me more like this:
> >> > if [] is empty then return true
> >> > otherwise check (pred everyx in coll)
> >> > however this allows for any pred especially(in this case) invalid
> preds:
> >> > `false` is not a function/pred
> >> > => (false 1)
> >> > ClassCastException java.lang.Boolean cannot be cast to
> clojure.lang.IFn
> >> > cgws.notcore/eval2542 (NO_SOURCE_FILE:1)
> >> > => (false true)
> >> > ClassCastException java.lang.Boolean cannot be cast to
> clojure.lang.IFn
> >> > cgws.notcore/eval2564 (NO_SOURCE_FILE:1)
> >> >
> >> > doesn't seem truthy to me
> >> >
> >> > Thanks.
> >> >
> >> >
> >> > On Thu, May 23, 2013 at 3:08 AM, Michał Marczyk
> >> > <michal.marc...@gmail.com>
> >> > wrote:
> >> >>
> >> >> On 22 May 2013 18:34, atkaaz <atk...@gmail.com> wrote:
> >> >> > I think the exception is thrown because you basically called
> (every?
> >> >> > false
> >> >> > coll) however on my clojure version I cannot reproduce it  oh wait
> >> >> > there
> >> >> > we
> >> >> > go, some bug here with empty collection (maybe someone can pick it
> >> >> > up):
> >> >> > => (every? false [1 2 3])
> >> >> > ClassCastException java.lang.Boolean cannot be cast to
> >> >> > clojure.lang.IFn
> >> >> > clojure.core/every? (core.clj:2423)
> >> >> > => (every? false [])
> >> >> > true
> >> >> >
> >> >> > => *clojure-version*
> >> >> > {:interim true, :major 1, :minor 6, :incremental 0, :qualifier
> >> >> > "master"}
> >> >>
> >> >> (every? false []) should return true if and only if (false x) is
> >> >> truthy for every x in [], which is certainly the case.
> >> >>
> >> >> Cheers,
> >> >> Michał
> >> >>
> >> >>
> >> >> >
> >> >> >
> >> >> >
> >> >> >
> >> >> >
> >> >> > On Wed, May 22, 2013 at 7:17 PM, Peter Mancini
> >> >> > <peter.manc...@gmail.com>
> >> >> > wrote:
> >> >> >>
> >> >> >> So I did some coding and came up with this but it is broken;
> >> >> >>
> >> >> >> (= java.lang.Boolean (type false))  ;;evaluates to true
> >> >> >>
> >> >> >> (defn all-true?
> >> >> >>   [coll]
> >> >> >>   (every? (cond (= java.lang.Boolean (type identity)) identity
> :else
> >> >> >> false) coll)) ;;compiles
> >> >> >>
> >> >> >> (all-true? '(true true true))  ;; throws
> >> >> >> java.lang.ClassCastException:
> >> >> >> java.lang.Boolean cannot be cast to clojure.lang.IFn
> >> >> >> (all-true? '(true true false))
> >> >> >> (all-true? '(true true 3))
> >> >> >>
> >> >> >> --
> >> >> >> --
> >> >> >> 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/groups/opt_out.
> >> >> >>
> >> >> >>
> >> >> >
> >> >> >
> >> >> > --
> >> >> > --
> >> >> > 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/groups/opt_out.
> >> >> >
> >> >> >
> >> >>
> >> >> --
> >> >> --
> >> >> 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/groups/opt_out.
> >> >>
> >> >>
> >> >
> >> > --
> >> > --
> >> > 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/groups/opt_out.
> >> >
> >> >
> >>
> >> --
> >> --
> >> 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/groups/opt_out.
> >>
> >>
> >
> > --
> > --
> > 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/groups/opt_out.
> >
> >
>
> --
> --
> 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/groups/opt_out.
>
>
>

-- 
-- 
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/groups/opt_out.


Reply via email to