Dc (program)
From Wikipedia, the free encyclopedia
dc (desc calculator) je softwarový kalkulátor s reverzní polskou notací a neomezenou aritmetickou přesností.[1] Je jednou z nejstarších unixových utilit a předchází dokonce vzniku programovacího jazyka C.[pozn. 1] Stejně jako jiné utility té doby vyznačuje výkonnými funkcemi, také však extrémně strohou syntaxí.[zdroj?] Tradičně, na základě dc byl vytvořen uživatelsky příjemnější kalkulační program bc (s infixovou notací), ačkoli současné implementace bc nebývají na dc závislé.[3]
První vydání | 1971 |
---|---|
Operační systém | multiplatformní, původně UNIX |
Vyvíjeno v | původně B |
Typ softwaru | software calculator |
Některá data mohou pocházet z datové položky. |
Historie
Nástroje dc a bc byly vyvinuty Lorindou Cherryovou a Robertem Morrisem z Bellových laboratoří v roce 1971.[4][5][6] Ken Thompson tvrdil, že dc byl zcela první program napsaný v Bellových laboratořích pro počítač PDP-11.[7]
Popis
Tento článek přináší několik příkladů ve snaze ukázat jazyk jako takový. Kompletní seznam příkazů a syntaxe je třeba nastudovat z manuálové stránky konkrétní implementace.
Na rozdíl od bc je dc založen na postfixové notaci, což znamená, že matematické výrazy jsou prováděny na způsob zásobníku.
Vynásobení čísel čtyři a pět (většinu bílých znaků lze vynechat):
4 5 *
p
Toto lze přeložit jako „vlož čtyři a pět do zásobníku, pak s operátorem násobení vyjmi dva prvky ze zásobníku, vynásob je a vlož výsledek zpět do zásobníku.“ Příkaz p slouží k vypsání horního prvku v zásobníku.
Pro výpočet (12 + 3^4)/11-22:
12 3 4 ^ + 11 / 22 -
p
Krom základních aritmetických a zásobníkových operací zahrnuje dc i podporu maker, podmínek a ukládání výsledků pro pozdější použití. Však je jeho syntaxe velmi strohá a komplexní programy bývají jen velmi obtížně čitelné.[zdroj?]
Mechanismem, který se skrývá se za makry a podmínkami, je tzv. registr. Registr je v dc úložný prostor s jednoznakovým názvem, do nějž lze ukládat a naopak z něj načítat. Pro práci s nimi se používají příkazy s a l. Například sc vyjme horní prvek ze zásobníku a uloží jej do registru c; lc vloží hodnotu z registru c do zásobníku:
3 sc 4 lc * p
S registry lze pracovat také jako se sekundárními zásobníky, takže lze mezi nimi a hlavním zásobníkem hodnoty vyjímat a vkládat.
Makra jsou implementována tak, že umožňují, aby hodnoty v registrech a zásobníku byly řetězci i čísly. Řetězec lze vypsat, může být ale také zpracován jako posloupnost příkazů. Kupříkladu je možné do registru m uložit makro pro přičtení jedničky a poté vynásobení dvěma:
[1 + 2 *] sm
S použitím příkazu x, který provede operaci na horní pozici zásobníku, je možné:
3 lm x p
Mechanismus maker lze využít i ke konstrukci podmínek. Příkaz =r vyjme ze zásobníku dvě hodnoty a makro, uložené v registru r, provede pouze v případě, že jsou si rovny. Následující příklad vypíše řetězec shodne jen tehdy, je-li hodnota na vrcholu zásobníku rovna 5:
[shodne]p] sm 5 =m
Cyklus je možné vytvořit definicí makra, které podmínečně volá samo sebe.
Příkladem budiž následující výpočet faktoriálu:
# F(x): return x!
# if x-1 > 1
# return x * F(x-1)
# otherwise
# return x
[d1-d1<F*]dsFxp
Příklad převedu vzdálenost v metrech na stopy a palce. Velká část příkladu se zabývá výzvami pro zadání hodnot na vstup, vypisováním výstupu ve vhodném formátu a probíhání cyklem pro převod dalšího čísla¨. Je zde ukázáno i pouštění jednořádkového příkazu z příkazového řádku.
dc -e '[[Zadej cislo (v metrech) nebo 0 pro ukonceni.]psj]sh[q]sz[lhx?d0=z10k39.370079*.5+0k12~1/rn[ stop ]Pn[ palcu]P10Pdx]dx'
Odkazy
Wikiwand - on
Seamless Wikipedia browsing. On steroids.