Miranda (programovací jazyk)

Z Multimediaexpo.cz

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í desetinou čá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]

Externí odkazy