Ogólnym rozwiązaniem jest wprowadzenie nowego typu. Może być bardziej zaangażowany, ale ma tę zaletę, że działa dla każdego typu, który nie definiuje własnej nieskończoności.
Jeśli Tjest to typ, dla którego lteqjest zdefiniowana, można określić InfiniteOr<T>z lteqczymś takim:
class InfiniteOr with type parameter T:
field the_T of type null-or-an-actual-T
isInfinite()
return this.the_T == null
getFinite():
assert(!isInfinite());
return this.the_T
lteq(that)
if that.isInfinite()
return true
if this.isInfinite()
return false
return this.getFinite().lteq(that.getFinite())
Tobie pozostawiam przetłumaczenie tego na dokładną składnię Java. Mam nadzieję, że pomysły są jasne; ale mimo wszystko pozwól mi je przeliterować.
Chodzi o to, aby stworzyć nowy typ, który ma wszystkie te same wartości, co jakiś już istniejący typ, plus jedną specjalną wartość, która - o ile możesz to stwierdzić za pomocą metod publicznych - działa dokładnie tak, jak chcesz, aby działała nieskończoność, np. Jest większa niż coś jeszcze. Używam nulltutaj do reprezentowania nieskończoności, ponieważ wydaje się to najprostsze w Javie.
Jeśli chcesz dodać operacje arytmetyczne, zdecyduj, co mają zrobić, a następnie zaimplementuj to. Prawdopodobnie najprościej jest, jeśli najpierw zajmiesz się nieskończonymi przypadkami, a następnie ponownie użyjesz istniejących operacji na skończonych wartościach oryginalnego typu.
Może istnieć ogólny wzorzec wskazujący, czy korzystne jest przyjęcie konwencji traktowania lewostronnych nieskończoności przed prawostronnymi lub odwrotnie; Nie mogę tego stwierdzić bez wypróbowania tego, ale w przypadku mniej niż lub równych ( lteq) myślę, że łatwiej jest najpierw spojrzeć na nieskończoność po prawej stronie. Zauważam, że nielteq jest to przemienne, ale addi mulsą; może to ma znaczenie.
Uwaga: wymyślenie dobrej definicji tego, co powinno się dziać z nieskończonymi wartościami, nie zawsze jest łatwe. Służy do porównywania, dodawania i mnożenia, ale może nie do odejmowania. Istnieje również rozróżnienie między nieskończonymi liczbami głównymi i porządkowymi, na które warto zwrócić uwagę.