Miranda (programovací jazyk)
Paradigma | funkcionální, deklarativní |
---|---|
Vznikl v | 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
- (anglicky) Domovská stránka Mirandy