A Miranda programozási nyelv teljesen funkcionális - nincs benne
semmiféle mellékhatás és imperatív sajátság. A program
(tulajdonképpen Mirandában script-nek hívjuk) egyenletek
gyûjteménye, amelyek számunkra szükséges különféle
függvényeket és adatstruktúrákat definiálják. Az egyenletek
sorrendje általában nem lényeges. Például nem kötelezõ az
elsõ használat elõtti definíció. Itt egy nagyon
egyszerû
Miranda script:
z = sq x / sq y
Megjegyzendõ, hogy
nincs szintaktikus teher - a Mirandát úgy tervezték, hogy a kód
minél tömörebb legyen. Nincsen kötelezõ típusdeklaráció, bár
(mint késõbb látni fogjuk) a nyelv erõsen típusos.
Nincsenek pontosvesszõk a definíciók végén - a mondatelemzõ
algoritmus intelligensen használja az elrendezést (a bekezdések
mélységét veszi alapul). A függvényhívás jelölése a függvénynév és
paraméterek egyszerû egymás mellé írása (pl.: sq x). A
négyzetfüggvény (sq) definíciójában az n formális
paraméter, melynek láthatósága a saját egyenletére korlátozott. Míg
a fenti példában bevezetett további nevek (a, b, ...)
a teljes script-ben láthatóak.
sq n = n * n
x
= a + b
y = a - b
a = 10
b = 5
A leggyakrabban használt
adatstruktúra a list (lista), melyet a Mirandában szögletes
zárójelek és vesszõk segítségével írunk, pl.:
1:(2:(3:(4:(5:[])))) || számok listája 1-tôl
5-ig
Listákat
a ++ operátorral tudunk összefûzni.
1:2:3:4:5:[] || zárójelek elhagyhatók
[1,2,3,4,5] || egy rövidebb jelölés
True:(False:(False:[])) || logikai értékek listája
week_days = ["Mon","Tue","Wed","Thur","Fri"]
days = week_days ++ ["Sat","Sun"]
A lista végét pedig
a [] konstruktor jelzi. További hasznos listaoperátorok: :,
mely a lista elejéhez fûz egy elemet, #, mely a lista
hosszát adja vissza, és a !, mellyel az indexelés végezhetõ.
Például a 0:[1,2,3] eredménye a [0,1,2,3], #days értéke a 7, és a days!0 a "Mon"-nak
felel meg.
Létezik egy -- operátor is, mely kivonást
valósítja meg. Az [1,2,3,4,5] -- [2,4] megfelel az [1,3,5]-nek. Az aritmetikai sorozatokat tartalmazó listáknak
egy rövid jelölése a ... Vegyük például a faktoriális
függvény definícióját, és az 1 és 100 közötti páratlan számok
összegzését (a sum és a product könyvtári függvények):
fac n =
product [1..n]
result = sum [1,3..100]
A lista elemei azonos
típusúak. Különbözõ típusú elemek sorozata a tuple,
melyet zárójelek segítségével írunk. Például:
employee =
("Jones",True,False,39)
A tuple a Pascal
rekordjához hasonlítható (míg a listát a Pascal tömbjéhez
hasonlíthatnánk). A tuple-ket nem lehet indexelni - elemeiket
mintaillesztéssel kérdezhetjük le (lásd késõbb). Nagy
választéka adott az elõre definált infix és prefix
operátoroknak. Ezek prioritási sorrendje: <
operátor típusa jelentése
----------------------------------------------------------------------------
: *->[*]->[*] lista
konstruktor
++,
-- [*]->[*]->[*] lista
konkatenáció,különbség
\/,
& bool->bool->bool logikai
vagy, és
~ bool->bool logikai
negáció
>,>=,=,~=... *->*->bool relációk
+, -, *, / num->num->num +,
-, *, /
div,
mod num->num->num egész
hányados, maradék
^ num->num->num hatvány
. (**->***)->(*->**)->*->*** függvénykompozíció
# [*]->num lista
hossza
! [*]->num->* listaelem
értéke