Miranda (programovací jazyk)

Miranda
Paradigma funkcionální, deklarativní
Vznik 1985
Autor David Turner
Vývojář Research Software Ltd
Typová kontrola silná, statická
Hlavní implementace Miranda
Ovlivněn jazyky KRC, ML, SASL
Ovlivnil jazyky Haskell

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

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

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

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

Externí odkazy

Zdroj