Numerical tower

From Wikipedia, the free encyclopedia
  (Redirected from Numeric tower)
Jump to navigation Jump to search

In Scheme and in Lisp dialects inspired by it, a numerical tower is the set of data types that represent numbers in a given programming language.

A representation of the numerical tower with five types of numbers

Each type in the tower conceptually "sits on" a more fundamental type, so an integer is a rational number and a number, but the converse is not necessarily true, i.e. not every number is an integer; this asymmetry implies that a language can allow implicit coercions of numerical types—without creating semantic problems—in only one direction: coercing an integer to a rational loses no information and does not affect the results of a function, but to coerce most reals to an integer could well result in a problem (for example, the real 1/3 does not equal any integer).

The Scheme programming language defines all its arithmetic within this model, as do most other Lisp dialects.[1] Some implementations may extend or adapt the tower. Kawa, a Scheme implementation for JVM, extends it with a Quantity type that is even more generic than Number. Smalltalk is another programming language that follows this model, but it has ArithmeticValue and Magnitude as superclasses of Number. Another popular variant is having both exact and inexact versions of the tower or parts of it; R7RS Scheme recommends but does not strictly require this of implementations. Most programming languages and language implementations do not support a Scheme-like numerical tower, though some languages provide limited or inconsistent support if implementation simplicity permits.


  1. ^ "Revised^5 Report on the Algorithmic Language Scheme".