/** * */ package xhail.core.terms; import java.util.Map; import java.util.Set; import xhail.core.Buildable; /** * @author stefano * */ public class Number implements Term, SchemeTerm { public static class Builder implements Buildable<Number> { private int value; public Builder(int value) { this.value = value; } @Override public Number build() { return new Number(this); } public Builder setValue(int value) { this.value = value; return this; } } private final int value; private Number(Builder builder) { if (null == builder) throw new IllegalArgumentException("Illegal 'builder' argument in Number(Number.Builder): " + builder); this.value = builder.value; } @Override public boolean equals(Object obj) { if (this == obj) return true; if (obj == null) return false; if (getClass() != obj.getClass()) return false; Number other = (Number) obj; if (value != other.value) return false; return true; } @Override public Term generalises(Set<Variable> set) { if (null == set) throw new IllegalArgumentException("Illegal 'term' argument in Number.generalises(Set<Variable>): " + set); return this; } @Override public Term generalises(Term term, Map<Term, Variable> map) { if (null == term) throw new IllegalArgumentException("Illegal 'term' argument in Number.generalises(Term, Map<Term, Variable>): " + term); if (null == map) throw new IllegalArgumentException("Illegal 'map' argument in Number.generalises(Term, Map<Term, Variable>): " + map); if (term instanceof Number) { Number other = (Number) term; if (other.getValue() == value) return this; else return null; } else return null; } public final int getValue() { return value; } @Override public int hashCode() { final int prime = 31; int result = 1; result = prime * result + value; return result; } // @Override // public Collection<Term> matches(SchemeTerm term, Collection<Term> usables, Set<Atom> facts) { // if (null == term) // throw new IllegalArgumentException("Illegal 'term' argument in Number.matches(SchemeTerm, Collection<Term>, Set<Atom>): " + term); // if (null == usables) // throw new IllegalArgumentException("Illegal 'usables' argument in Number.matches(SchemeTerm, Collection<Term>, Set<Atom>): " + usables); // if (null == facts) // throw new IllegalArgumentException("Illegal 'facts' argument in Number.matches(SchemeTerm, Collection<Term>, Set<Atom>): " + facts); // if (term instanceof Number) { // Number other = (Number) term; // if (value == other.getValue()) // return Collections.emptySet(); // else // return null; // } else // return null; // } // // @Override // public Map<Term, Collection<Atom>> matching(Set<Term> usables, Map<SchemeTerm, Set<Atom>> parts) { // return Collections.singletonMap(this, Collections.emptySet()); // } @Override public String toString() { return "" + value; } }