123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990 |
- package migl.lisp;
- /**
- * Simple Boolean type for our lisp interpreter.
- *
- * We do not use the classical boolean operators in order to have an easy
- * translation to and from the lisp representation of Booleans.
- *
- * The Boolean operators are not implemented. They must be applied on the
- * {@link #value()} of the object.
- *
- * @author leberre
- *
- */
- public final class LispBoolean {
- /**
- * The object representing the true Boolean value.
- */
- public static final LispBoolean TRUE = new LispBoolean(true);
- /**
- * The object representing the false Boolean value.
- */
- public static final LispBoolean FALSE = new LispBoolean(false);
- private final boolean value;
- private LispBoolean(boolean value) {
- this.value = value;
- }
- /**
- * Retrieve a Java primitive Boolean value for Boolean reasoning in Java code.
- *
- * @return the corresponding Java's Boolean value.
- */
- public boolean value() {
- return this.value;
- }
- @Override
- public int hashCode() {
- return Boolean.hashCode(value);
- }
- @Override
- public boolean equals(Object obj) {
- if (obj instanceof LispBoolean) {
- return ((LispBoolean) obj).value == value;
- }
- return false;
- }
- @Override
- public String toString() {
- return value ? "#t" : "#f";
- }
- /**
- * Retrieve a {@link LispBoolean} from a Java primitive Boolean.
- *
- * @param b
- * a Boolean value
- * @return the corresponding {@link LispBoolean} object.
- */
- public static LispBoolean valueOf(boolean b) {
- return b ? TRUE : FALSE;
- }
- /**
- * Retrieve a {@link LispBoolean} from its textual representation.
- *
- * @param s
- * a textual representation of the boolean value (#t or #f)
- * @return the corresponding {@link LispBoolean} object.
- * @throws IllegalArgumentException
- * if s does not correspond to a valid textual representation.
- */
- public static LispBoolean valueOf(String s) {
- switch (s.toLowerCase()) {
- case "#t":
- return TRUE;
- case "#f":
- return FALSE;
- default:
- throw new IllegalArgumentException("Not a Boolean");
- }
- }
- }
|