[racket] Boolean expressions [Was: static variables question]

From: Robby Findler (robby at eecs.northwestern.edu)
Date: Mon Feb 20 07:27:03 EST 2012

Oh, good point! I've adjusted implies to just take two arguments.

Meanwhile, I've also added a binary xor. It returns the non-#f
argument when exactly one of the arguments is #f and otherwise returns
#f. Comments welcome.

Robby

On Mon, Feb 20, 2012 at 5:28 AM, Carl Eastlund <cce at ccs.neu.edu> wrote:
> If (implies a b ... z) is equivalent to (implies a (implies b ... z)), then
> it is also equivalent to (implies (and a b ...) z).  In which case, the
> 1-ary case should be clear: just return z.  In truth, it is not really
> necessary to have n-ary implies if you're willing to nest the (and ...)
> explicitly.  Given that Scheme/Racket n-ary operators tend to have the "..."
> last, with occasional exceptions like list* and apply, restricting implies
> to 2 arguments might avoid cases where (implies a b c d e) is confusing to
> read.  (implies (and a b c d) e) is clearer.
>
> Carl Eastlund
>
> On Sun, Feb 19, 2012 at 8:16 PM, Robby Findler <robby at eecs.northwestern.edu>
> wrote:
>>
>> On Sun, Feb 19, 2012 at 7:10 PM, Neil Toronto <neil.toronto at gmail.com>
>> wrote:
>> > On 02/19/2012 06:05 AM, Robby Findler wrote:
>> >>
>> >> On Sun, Feb 19, 2012 at 12:30 AM, Gary Baumgartner<gfb at cs.toronto.edu>
>> >>  wrote:
>> >>>
>> >>> On a more productive note: in Racket code I define and use 'implies' a
>> >>> lot,
>> >>>  often conjoined, for predicates. It's mainly of declarative value,
>> >>> which
>> >>> is
>> >>>  perhaps why it's uncommon in implementation despite how common it is
>> >>> in
>> >>>  specification. And for boolean expressions in general I also use
>> >>> 'neither'.
>> >>>  Are these something that others [would] use and so could be added to
>> >>> Racket's
>> >>>  library?
>> >>
>> >>
>> >> Seems to me adding implies, nand, and nor to racket/bool is a good
>> >> idea.
>> >>
>> >> Let me know if you disagree (and if you disagree after I've already
>> >> committed, it is a simple thing to drop the commit or change it).
>> >
>> >
>> > I've occasionally written my own `implies', but never make it shortcut
>> > like
>> > `and' and `or'. Speaking of which, would it handle more than two
>> > arguments?
>> > One? Zero? What kind of associativity would be appropriate?
>>
>> The version I checked in shortcuts in an implication-appropriate way
>> (if the first argument is #f). I think the convention (due to
>> functions and currying) is pretty well established that it associates
>> to the right. So that's what the version I checked in does for the 3+
>> argument case. I didn't see something reasonable for the 0 or 2-ary
>> case so it doesn't handle them.
>>
>> > Bwahaha.
>>
>> :)
>>
>> I'm still pondering those questions for xor. :)
>>
>> Robby
>>
>> ____________________
>>  Racket Users list:
>>  http://lists.racket-lang.org/users
>
>


Posted on the users mailing list.