human-logic
Version:
112 lines • 3.6 kB
JavaScript
"use strict";
/**
* Discrete Common Sense Logic
*
* Discrete Common Sense Logic only allows `true`, `false`, `maybe`, `never` or `undefined` as a value.
* @module
*/
Object.defineProperty(exports, "__esModule", { value: true });
exports.or = exports.and = exports.not = exports.Categories = exports.TRUE = exports.MAYBE = exports.NEVER = exports.FALSE = exports.UNDEF = void 0;
/**
* Discrete Logical Category of “totally unknown”
*/
exports.UNDEF = 'UNDEF';
/**
* Discrete Logical Category of “certainly negative”
*/
exports.FALSE = 'FALSE';
/**
* Discrete Logical Category of “impossible” (neither positive nor negative)
*/
exports.NEVER = 'NEVER';
/**
* Discrete Logical Category of “uncertain” (could be either positive or negative)
*/
exports.MAYBE = 'MAYBE';
/**
* Discrete Logical Category of “certainly positive”
*/
exports.TRUE = 'TRUE';
/**
* List of all five categories.
*
* Useful to iterate through all five logical categories.
*/
exports.Categories = [exports.UNDEF, exports.FALSE, exports.NEVER, exports.MAYBE, exports.TRUE];
/**
* Discrete Logical NOT:
*
* | `undef` | `false` | `never` | `maybe` | `true` |
* | --- | --- | --- | --- | --- |
* | `undef` | `true` | `maybe` | `never` | `false` |
*/
function not(value) {
switch (value) {
case exports.FALSE:
return exports.TRUE;
case exports.NEVER:
return exports.MAYBE;
case exports.MAYBE:
return exports.NEVER;
case exports.TRUE:
return exports.FALSE;
default:
return exports.UNDEF;
}
}
exports.not = not;
/**
* Discrete Logical AND:
*
* | `a` \ `b` | `undef` | `false` | `never` | `maybe` | `true` |
* | --- | --- | --- | --- | --- | --- |
* | **`undef`** | `undef` | `undef` | `undef` | `undef` | `undef` |
* | **`false`** | `undef` | `false` | `false` | `false` | `false` |
* | **`never`** | `undef` | `false` | `never` | `false` | `never` |
* | **`maybe`** | `undef` | `false` | `false` | `maybe` | `maybe` |
* | **`true`** | `undef` | `false` | `never` | `maybe` | `true` |
*/
function and(a, b) {
if (a === exports.UNDEF || b === exports.UNDEF)
return exports.UNDEF;
if (a === exports.FALSE || b === exports.FALSE)
return exports.FALSE;
if (a === exports.TRUE)
return b;
if (b === exports.TRUE)
return a;
if (a === exports.NEVER && b === exports.NEVER)
return exports.NEVER;
if (a === exports.MAYBE && b === exports.MAYBE)
return exports.MAYBE;
return exports.FALSE;
}
exports.and = and;
/**
* Discrete Logical OR:
*
* | `a` \ `b` | `undef` | `false` | `never` | `maybe` | `true` |
* | --- | --- | --- | --- | --- | --- |
* | **`undef`** | `undef` | `undef` | `undef` | `undef` | `undef` |
* | **`false`** | `undef` | `false` | `never` | `maybe` | `true` |
* | **`never`** | `undef` | `never` | `never` | `true` | `true` |
* | **`maybe`** | `undef` | `maybe` | `true` | `maybe` | `true` |
* | **`true`** | `undef` | `true` | `true` | `true` | `true` |
*/
function or(a, b) {
if (a === exports.UNDEF || b === exports.UNDEF)
return exports.UNDEF;
if (a === exports.TRUE || b === exports.TRUE)
return exports.TRUE;
if (a === exports.FALSE)
return b;
if (b === exports.FALSE)
return a;
if (a === exports.NEVER && b === exports.NEVER)
return exports.NEVER;
if (a === exports.MAYBE && b === exports.MAYBE)
return exports.MAYBE;
return exports.TRUE;
}
exports.or = or;
//# sourceMappingURL=Category.js.map