Sha256: 4bb794afb3f053131c569c7a33406c3af7b2d8e29bc52e50092db5ef2715fd6e

Contents?: true

Size: 1.78 KB

Versions: 1

Compression:

Stored size: 1.78 KB

Contents

#--
# Infinity
#
# Copyright (c) 2004,2005 Thomas Sawyer
#
# Ruby License
#
# This module is free software. You may use, modify, and/or redistribute this
# software under the same terms as Ruby.
#
# This program is distributed in the hope that it will be useful, but WITHOUT
# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
# FOR A PARTICULAR PURPOSE.
#
#
# ==========================================================================
# Revision History ::
# --------------------------------------------------------------------------
#  04.05.01  Trans    * Minor modifications to documentation.
# ==========================================================================
#
# :NOTE: Plan to update the interface a bit.
#
#++

#:title: Infinity
#
# A full featured Infinity class, supporting aleph levels and signed
# direction. Inifinty is a multiton based on the aleph and direction 
# values. The conastant INFINITY is provided as the common case with 
# aleph=0 and direction=+1 (positive).
#
# == Usage
#
#   +INFINITY < 1  #=> false
#   -INFINITY < 1  #=> true
#
#   a0 = Infinity[0]
#   a1 = Infinity[1]
#
#   a0 < a1  #=> true
#
# = Author(s)
#
# * Thomas Sawyer
#

require 'mega/multiton'

class Infinity < Numeric

  include Multiton

  def self.[](a)
    self.new(a)
  end

  attr_reader :aleph, :direction

  def initialize(aleph=0, direction=1)
    @aleph = aleph
    @direction = direction
  end

  def -@
    self.class.instance(@aleph, @direction * -1)
  end

  def to_f
    (1.0/0) * @direction
  end

  def times
    loop do
      yield
    end
  end

  def <=>(x)
    return (x.kind_of?(Infinity) ? (@aleph <=> x.aleph) : @direction)
  end

  def to_s
    %Q{#{ '-' if @direction == -1 }Infinity[#{@aleph}]}
  end

end

# constant (for aleph=0)
INFINITY = Infinity.instance


Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
mega-0.3.1 lib/mega/infinity.rb