Tristate - wanna?
Alex Parrill via Digitalmars-d
digitalmars-d at puremagic.com
Sat Mar 26 15:39:58 PDT 2016
On Saturday, 26 March 2016 at 22:11:53 UTC, Nordlöw wrote:
> On Saturday, 26 October 2013 at 15:41:32 UTC, Andrei
> Alexandrescu wrote:
>> While messing with std.allocator I explored the type below. I
>> ended up not using it, but was surprised that implementing it
>> was quite nontrivial. Should we add it to stdlib?
>
> I can think of many variants of for this. What about
>
> { yes, // 1 chance
> no, // 0 chance
> likely, // > 1/2 chance
> unlikely, // < 1/2 chance
> unknown // any chance
> }
>
> ?
>
> Partial implementation at
>
> https://github.com/nordlow/justd/blob/master/fuzzy.d#L15
>
> :)
If we're going down that route, might as well use state tables.
With CTFE + templates, you could possibly do something like this:
immutable State[] StateOrTable = ParseStateTable!q{
| yes | no | likely | unlikely | unknown
------------------------------------------------------
yes | yes | yes | yes | yes | yes
no | yes | no | likely | unlikely | unknown
likely | yes | likely | likely | likely | likely
unlikely| yes | unlikely | likely | unlikely | unknown
unknown | yes | unknown | likely | unknwon | unknown
};
State opBinary(string op)(State other)
if(op == "||") {
return StateOrTable[this.value*NumStates+other.value];
}
Though I see issues with having a generic n-state value template
and also rewriting `a != b` to `!(a == b)`; I suspect that there
may be some class of values where the two are not equivalent.
More information about the Digitalmars-d
mailing list