Miranda (programovací jazyk)

Z Wikipedie, otevřené encyklopedie
Skočit na navigaci Skočit na vyhledávání
Miranda
Paradigmafunkcionální, deklarativní
Vznikl v1985
AutorDavid Turner
VývojářResearch Software Ltd
Typová kontrolasilná, statická
Hlavní implementaceMiranda
Ovlivněn jazykyKRC, ML, SASL
Ovlivnil jazykyHaskell

Miranda je v informatice čistě funkcionální programovací jazyk s líným vyhodnocováním, který navrhl David Turner jako nástupce jeho předchozích programovacích jazyků SASL a KRC, které využívají určitých konceptů jazyků ML a Hope. Obchodní značku Miranda vlastní Firma Research Software Ltd. of England. Miranda byl prvním čistě funkcionálním jazykem, který byl komerčně podporován.

Řešení většiny učebnicových problémů je v Mirandě kratší a jednodušší než ve většině tradičních programovacích jazyků (možná kromě APL). Uživatelé Mirandy mohou rychleji psát spolehlivější kódy, než s předchozími programovacími jazyky. Miranda byla vydána v roce 1985 jako rychlý interpret pro unixové operační systémy s následnými vydáními v letech 1987 a 1989. Haskell je pozdější nástupce Mirandy a v mnoha směrech se jí podobá.

Popis[editovat | editovat zdroj]

Program (resp. skript) je v Mirandě množinou rovnic, které definují různé matematické funkce a algebraické datové typy. Slovo množina je zde důležité, protože v podstatě nezáleží na pořadí jednotlivých rovnic a není nutné definovat předcházející entitu k jejímu použití.

Komentáře se uvádějí za dvojicí znaků || a platí až do konce řádku. Alternativní konvencí pro komentáře pak forma, kde každý řádek je považován za komentář, kromě řádků začínajících znakem >.

Základní datové typy jsou char, num a bool. Znakový řetězec je prostý seznam znaků, zatímco num je podle potřeby převáděn mezi celými čísly (která jsou nastavena implicitně) nebo reálnými čísly s plovoucí desetinnou čárkou.

Dalším datovým typem jsou Tuples, což jsou sekvence elementů, které se mohou lišit datovým typem. Tuples odpovídají například datovému typu záznam (anglicky record) v jazyce Pascal. Výčet elementů je uzavřen mezi kulatými závorkami a jednotlivé elementy jsou odděleny čárkami:

this_employee = ("Folland, Mary", 10560, False, 35)

Nejvíce používanou datovou strukturou v Mirandě je však seznam. Výčet prvků je opět oddělen čárkami, je ale uzavřen mezi závorky hranaté a všechny prvky musí být stejného typu:

week_days = ["Mon","Tue","Wed","Thur","Fri"]

Pro výčet prvků seznamu také existuje několik zkratek, které ovšem můžeme použít jen v případě, že se jedná o aritmetickou řadu, s konkrétní inkrementací, která je větší než jedna:

fac n = product [1..n]
odd_sum = sum [1,3..100]

Více důležitým a silným nástrojem pro tvorbu číselných seznamů jsou takzvané „list comprehensions“ (dříve známé jako „ZF expressions“), které jsou tvořený dvěma základními parametry: výrazem a prvky pro které daný výraz platí:

squares = [ n * n | n <- [1..] ]

Zde se jedná o seznam druhých mocnin, který je tvořen ze seznamu kladných celých čísel a řadu, kde každý prvek je funkcí toho předešlého:

powers_of_2 = [ n | n <- 1, 2*n .. ]

Jak ukazují tyto dva příklady, Miranda umožňuje počítat se seznamy s nekonečným prvkem elementů, z nich nejjednodušší je seznam kladných celých čísel.

Ukázka[editovat | editovat zdroj]

Následující kód určuje soubor všech podmnožin z množiny celých čísel:

subsets [] = [[]]

subsets (x:xs) = [[x] ++ y | y <- ys] ++ ys
where ys = subsets xs

Toto je pak ukázka výše zmíněného literate scriptu obsahující funkci primes, která vrací seznam všech prvočísel. V takzvaném „literate script“ jsou všechny řádky, které nezačínají znakem > považovány za komentáře:

> || The infinite list of all prime numbers, by the sieve of Eratosthenes.

The list of potential prime numbers starts as all integers from 2 onwards;
as each prime is returned, all the following numbers that can exactly be
divided by it are filtered out of the list of candidates.

> primes = sieve [2..]
> sieve (p:x) = p : sieve [n | n <- x; n mod p ~= 0]

Reference[editovat | editovat zdroj]

V tomto článku byl použit překlad textu z článku Miranda (programming language) na anglické Wikipedii.

Externí odkazy[editovat | editovat zdroj]