Boost logo

Boost :

Subject: Re: [boost] Ternary logic programming
From: Andrzej Krzemienski (akrzemi1_at_[hidden])
Date: 2015-07-02 04:56:06


2015-07-02 6:23 GMT+02:00 Paul Long <plong_at_[hidden]>:

> On 7/1/2015 7:49 PM, Niall Douglas wrote:
>
>> Out of interest, what do you think of my free function ternary logic
>> programming:
>>
>> tribool t;
>> if(true_(t)) { /* true */ }
>> else if(false_(t)) { /* false */ }
>> else if(unknown(t)) { /* other state */ }
>>
>> Nobody here seemed to like it. I am looking for something the average
>> programmer will notice immediately and not accidentally assume it's
>> boolen logic going on here.
>>
>
> I'm jumping in in the middle of this thread, but are you purposefully
> naming the value--true, false, unknown--to make the programmer more aware
> of the ternary logic? Otherwise, one could do the following, which
> boost::tribool supports (I'm probably stating the obvious; please forgive
> me):
>
> tribool t;
> if (t) { /* true */ }
> else if (!t) { /* false */ }
> else { /* unknown */ }
>
> This reminds me of the original three-way IF statement in FORTRAN, except
> it was an arithmetic test for less-than, equal-to, and greater-than zero.
> Oh, and it was sort of a computed goto, so there's that. This is what it
> looked (looks?) like:
>
> IF (N) LTLABEL, EQLABEL, GTLABEL
>
> I suppose the literal translation to ternary logic and C++ would be
> something like this:
>
> if (t) true_statement; else false_statement; else unknown_statement;
>
> Yes, two else's! One would have to be careful with the curly braces, as
> always, but I don't think this would be ambiguous if added to the grammar.
> Or how about introducing a new keyword, such as "otherwise?" That should be
> enough to tip off a programming that they're not in Kansas anymore:
>
> if (t) true_statement; else false_statement; otherwise unknown_statement;
>
> And how about a quaternary operator while we're at it?
>
> t ? true_expression : false_expression : unknown_expression
>

Is it not what the switch statement is for?

Regards,
&rzej


Boost list run by bdawes at acm.org, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk