Exactly. Is there any particular reason that . and sconcat aren't declared nary? In the case of ., it seems particularly important both because of dotident and dotassoc.
Kris, thanks for bringing this up. Here are some more edge cases with xreduce: There seem to be some nary functions which aren't declared nary, and therefore aren't called with zero arguments: sconcat() => "" xreduce('sconcat,[]) => error ... "."() => 1 xreduce(".",[]) => error The base case of "." depends on dotident: dotident: 'mydotident$ "."() => mydotident Fortunately, "." does the right thing if called as nary even with dotassoc:false: "."(a,b,c) => a.b.c dotassoc:false$ "."(a,b,c) => a.(b.c)...
I don't think it would be confusing to use ∧/∨ for both boolean values (true/false) and for numbers interpreted as bitstrings. Let's look at three cases: Operations on true/false Operations on numbers Operations on variables Mixed operations Operations on true/false I trust we agree that true ∧ false => false etc. are completely conventional uses of the ∧/∨ operators. Operations on numbers What are the possible meanings of 235 ∧ 719? In Lisp, everything that isn't nil counts as true, and and has...
I don't think it would be confusing to use ∧/∨ for both boolean values (true/false) and for numbers interpreted as bitstrings. Let's look at three cases: Operations on true/false Operations on numbers Operations on variables Mixed operations Operations on true/false I trust we agree that true ∧ false => false etc. are completely conventional uses of the ∧/∨ operators. Operations on numbers What are the possible meanings of 235 ∧ 719? In Lisp, everything that isn't nil counts as true, and and has...
Another problem I noticed with to_poly_solve's %and: subst works with "and" makelist(subst('f, q, a and b), q, ["and", nounify("and"), verbify("and"), op(a and b), ?mand]); => [f(a, b), a and b, f(a, b), f(a, b), f(a,b)] makelist(opsubst('f, q, a and b), q, ["and", nounify("and"), verbify("and"), op(a and b), ?mand]); => [f(a, b), f(a, b), f(a, b), f(a, b), f(a,b)] subst doesn't work with "%and" makelist(subst('f, q, a %and b), q, ["%and", nounify("%and"), verbify("%and"), op(a %and b), ?%and]) =>...
In my last message, I used ∧ and ∨ without introduction. Sorry. Why not use ∧ and ∨ so that they'll display nicely?... and define %and and %or as aliases for them, since most of us can't type ∧ and ∨ easily. I see that wxMaxima includes the symbols on the left-side menu, but does the opposite of what I'm suggesting: it allows them on input, but displays them as and/or. For Lisps that don't handle Unicode, they can continue to use %and and %or on output as well. We already use some non-ASCII characters...
Inspired by & and |(which is what I assume you meant, since && and || are the short-circuit operators in every other language), I wonder if we should generalize them to bitstrings. & and | are used in many languages for both boolean and for bitwise boolean, so I wonder whether %and (whatever we call it) should denote not just boolean operators, but bitwise boolean operators. We'd have: 235 ∧ 719 => 203 true ∧ true => true not(37) => -38 << two's complement not(0) => -1 << true = -1, not 1 !!! is(-1=true)...
Inspired by & and | (which is what I assume you meant, since && and || are the short-circuit operators in every other language), I wonder if we should generalize them to bitstrings. & and | are used in many languages for both boolean and for bitwise boolean, so I wonder whether %and (whatever we call it) should denote not just boolean operators, but bitwise boolean operators. We'd have: 235 ∧ 719 => 203 true ∧ true => true not(37) => -38 << two's complement not(0) => -1 << true = -1, not 1 !!! is(-1=true)...