Dc (Unix)

Dc (Unix)

dc is a reverse-polish desk calculator which supports unlimited precision arithmetics. It is one of the oldest Unix utilities, predating even the invention of the C programming language; like other utilities of that vintage, it has a powerful set of features but an extremely terse syntax. Traditionally, the more user-friendly (with its infix notation) bc calculator program was implemented on top of dc, although more modern implementations are no longer related.

This article provides some examples in an attempt to give a flavour of the language; for a complete list of commands and syntax you should consult a manual page for your implementation.

To multiply four and five in dc (note that most of the whitespace is optional):

4 5 * p

This translates into "push four and five onto the stack, then, with the multiplication operator, pop two elements from the stack, multiply them and push the result back on the stack." Then the 'p' command is used to examine (print out to the screen) the top element on the stack.

To change the precision, the command is k. Since the default precision is zero, this sequence of commands produces '0' as a result: 2 3 / p

By adjusting the precision with k, arbitrary number of decimal places can be produced. This command sequence outputs '.66666'.

5 k 2 3 / p

To evaluate (12 + 3^4)/11-22:

12 3 4 ^ + 11 / 22 - p

In addition to these basic arithmetic and stack operations, dc includes support for macros, conditionals and storing of results for later retrieval.

The mechanism underlying macros and conditionals is the register, which in dc is a storage location with a single character name which can be stored to and retrieved from: 'sc' pops the top of the stack and stores it in register c, and 'lc' pushes the value of register c onto the stack. For example:

3 sc 4 lc * p

Registers can also be treated as secondary stacks, so values can be pushed and popped between them and the main stack.

Macros are then implemented by allowing registers and stack entries to be strings as well as numbers. A string can be printed, but it can also be executed (ie processed as a sequence of dc commands). So for instance we can store a macro to add one and then multiply by 2 into register m:

[1 + 2 *] sm

and then (using the 'x' command which executes the top of the stack) we can use it like this:

3 lm x p

Finally, we can use this macro mechanism to provide conditionals. The command '=r' will pop two values from the stack, and execute the macro stored in register r only if they are equal. So this will print the string 'equal' only if the top of the stack is equal to 5:

[equal] p] sm 5 =m

Looping is then possible by defining a macro which (conditionally) reinvokes itself.

As an example of a relatively simple program in dc, this command (in 1 line):

dc -e ' [Enter a number (metres), or 0 to exit] psj] sh [q] sz [lhx?d0=z10k39.370079*.5+0k12~1/rn [ feet ] Pn [ inches] P10Pdx] dx'

will convert distances from metres to feet and inches; the bulk of it is concerned with prompting for input, printing output in a suitable format and looping round to convert another number.

As an example, here is an implementation of the Euclidean algorithm to find the GCD:

dc -e '?? [dSarLa%d0

References

*
* [http://plan9.bell-labs.com/7thEdMan/vol2/dc The sources for the manual page for 7th Edition Unix dc]
* Ritchie, Dennis M. (Sep. 1979) [http://cm.bell-labs.com/cm/cs/who/dmr/hist.html The Evolution of the Unix Timesharing System]


Wikimedia Foundation. 2010.

Игры ⚽ Нужно решить контрольную?

Look at other dictionaries:

  • Unix — (officially trademarked as UNIX, sometimes also written as Unix with small caps) is a computer operating system originally developed in 1969 by a group of AT T employees at Bell Labs, including Ken Thompson, Dennis Ritchie, Douglas McIlroy, and… …   Wikipedia

  • UNIX — Ken Thompson und Dennis Ritchie Basisdaten Entwickler …   Deutsch Wikipedia

  • Unix — Kommandozeile (Unix Prompt) Basisdaten Entwickler Ken Thompso …   Deutsch Wikipedia

  • Unix — (registrado oficialmente como UNIX®) es un sistema operativo portable, multitarea y multiusuario; desarrollado, en principio, en 1969 por un grupo de empleados de los laboratorios Bell de AT T, entre los que figuran Ken Thompson, Dennis Ritchie y …   Wikipedia Español

  • UNIX — UNIX, parfois écrit « Unix », avec des petites capitales, est un système d exploitation multitâche et multi utilisateur créé en 1969, conceptuellement ouvert et fondé sur une approche par laquelle il offre de nombreux petits outils… …   Wikipédia en Français

  • Unix — (marque déposée officiellement comme UNIX, parfois aussi écrit comme Unix avec les petites capitalisations) est le nom d un système d exploitation multitâche et multi utilisateur créé en 1969, conceptuellement ouvert et fondé sur une approche par …   Wikipédia en Français

  • Unix time — Unix time, or POSIX time, is a system for describing points in time, defined as the number of seconds elapsed since midnight Coordinated Universal Time (UTC) of January 1 1970, not counting leap seconds. It is widely used not only on Unix like… …   Wikipedia

  • Unix-подобная операционная система — Генеалогическое дерево UNIX подобных ОС UNIX подобная операционная система (иногда сокр. *nix)  система, которая образовалась под влиянием UNIX. Термин включает свободные/открытые операционные системы, образованные от UNIX компании …   Википедия

  • UNIX — 〈[ju:nıx] EDV〉 Betriebssystem für Computer, das zum großen Teil in der Programmiersprache C geschrieben ist [engl.] * * * UNIX   [ursprünglich UNICS, Abk. für Uniplexed Information and Computing System, dt. »nicht multiplextes (vielseitiges)… …   Universal-Lexikon

  • UNIX-Kommandos — Unix Systeme zeichnen sich durch eine Vielzahl von Kommandos aus, mit denen sich über eine Shell das Betriebssystem bedienen lässt. Die Syntax dieser Kommandos weicht unter den verschiedenen Systemen voneinander ab. Es existieren die beiden… …   Deutsch Wikipedia

  • Unix-Befehle — Unix Systeme zeichnen sich durch eine Vielzahl von Kommandos aus, mit denen sich über eine Shell das Betriebssystem bedienen lässt. Die Syntax dieser Kommandos weicht unter den verschiedenen Systemen voneinander ab. Es existieren die beiden… …   Deutsch Wikipedia

Share the article and excerpts

Direct link
Do a right-click on the link above
and select “Copy Link”