일반적인 해결책은 새로운 유형을 도입하는 것입니다. 더 복잡 할 수는 있지만 자체 무한대를 정의하지 않는 모든 유형에서 작동하는 이점이 있습니다.
경우 T
의 유형이있다 lteq
정의, 당신은 정의 할 수 있습니다 InfiniteOr<T>
와 lteq
같은 것을 :
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())
나는 이것을 정확한 Java 구문으로 번역하기 위해 당신에게 맡길 것입니다. 아이디어가 분명하기를 바랍니다. 어쨌든 철자를 쓰겠습니다.
아이디어는 이미 존재하는 일부 유형과 동일한 값과 공용 메소드를 통해 알 수있는 한 특별한 값을 갖는 새 유형을 작성하여 무한대가 원하는 방식으로 정확하게 작동하는 것입니다. 다른 것. null
Java에서 가장 간단한 것처럼 보이기 때문에 무한대를 나타내는 데 사용 하고 있습니다.
산술 연산을 추가하려면 수행 할 작업을 결정한 다음 구현하십시오. 무한 사례를 먼저 처리 한 다음 원래 유형의 유한 값에 대해 기존 작업을 재사용하는 것이 가장 간단합니다.
오른쪽 무한대 전에 왼쪽 무한대를 처리하는 규칙을 채택하는 것이 유리한지 아닌지에 대한 일반적인 패턴이있을 수도 있고 그렇지 않을 수도 있습니다. 시도하지 않고 말할 수는 없지만 같지 않은 ( lteq
)의 경우 오른쪽 무한대를 먼저 보는 것이 더 간단하다고 생각합니다. 나는주의 lteq
입니다 하지 교환 법칙이 성립하지만, add
하고 mul
있습니다; 어쩌면 그것은 관련이 있습니다.
참고 : 무한 값에서 발생하는 일에 대한 올바른 정의를 얻는 것이 항상 쉬운 것은 아닙니다. 비교, 덧셈 및 곱셈을위한 것이지만 뺄셈은 아닙니다. 또한 무한 추기경과 서수 사이에는주의를 기울여야 할 구분이 있습니다.