A Fables programozási nyelv

Típusok, típuskonstrukciók

Típusszerkezet

Kidolgozásra vár.

Elemi típusok

Kidolgozásra vár.

Diszkrét típus(ok)

Kidolgozásra vár.

Valós típus(ok)

Kidolgozásra vár.

Mutató és referencia típus(ok)

Kidolgozásra vár.

Típuskonstrukciók

Tömb típus(ok)

A Fables-ben két speciális típusú szerkezet van, a halmazok és a sorozatok, amelyet együttesen felsorolásoknak nevezünk. Mindkettő tetszőleges számú elemet tartalmazhat. A felsorolások szintaxisa nagyon hasonló, az egyetlen különbség, hogy a halmazokat kapcsos zárójellel, felsorolásokat szögletes zárójellel definiáljuk.

A sorozat sorrendje meghatározott, és minden elemet akárhányszor tartalmazhat.

Egyszerűen transzformálhatjuk az elemeket:

squares = [ x*x : x is nums ];
[1,4,9,16,25]

Részhalmazra szűréssel kombinálhatjuk is:

odd_squares = [ x*x : x is nums when x mod 2 == 0];
[4,16]

Akár több változót is használhatunk:

muls = [ x*y : x is nums, y is odds ];
[2,4,4,8,6,12,8,16,10,20]

Van egy egyszerűbb forma is az összefüggő egy-, ill. többdimenziós intervallumok leírására:

[5..10]
[5,6,7,8,9,10]
[2..7,1..3]
[2,1],[2,2],[2,3],[3,1],[3,2],[3,3],[4,1],[4,2],[4,3]]

A Fables rendelkezik a sorozatok feletti konkatenáció ++ műveletével. Ha valamelyik argumentuma nem sorozat, akkor azzá konvertálódik.

[1,2,3] ++ 4 ++ [5,6] ++ 7
[1,2,3,4,5,6,7]

Ha a konkatenáció valamelyik argumentuma String, akkor az egész eredmény egy String-é konvertálódik.

A felsorolások egyben függvények is: egy leképezést definiálnak az elemeik és a természetes számok között. Az egyes elemeket így elérjük a megfelelő indexekkel, 0-tól kezdve.

muls(0)
2

Több elem ill. elemek egy részhalmaza is kiválasztható. Ha több paraméter is adott, akkor az eredmény is egy felsorolás lesz. Ha csak egy paraméter adott, de az indexek egy sorozata, akkor az adott indexen szereplő elemek sorozata lesz az eredmény:

muls([3,2,3,5])
[8,4,8,12]

Fables-ben a vektorok és mátrixok sorozatokkal ill. sorozatok sorozatával írhatóak le. Logikai és aritmetikai operátorok is alkalmazhatók a felsorolásokon, azonban a méretüknek ekkor egyezniük kell.

[1,2,3,4,5,6,7] == [1,2,3,4,5,6,7]
true
[[1,2],[3,4]] + [[5,6],[7,8]]
[[6,8],[10,12]]

Bináris operátorok is alkalmazhatók a felsorolásokon, külön jelöléssel. Ekkor az operátort zárójelek közé kell rakni a felsoroláskifejezés előtt. Ekkor az operátor paraméterei a felsorolás indexelt elemei lesznek, például:

(+) [1,2,3,4,5]
15

A Stringek is sorozatokként vannak értelmezve, karakterek sorozataként. String literálokat ugyanúgy definiálhatunk, akárcsak Javaban.

"Sic transit gloria mundi"

A String konkatenációra is a ++ operátorral hivatkozhatunk. Minden egyes nem-String komponens előbb Stringgé konvertálódik, és az eredmény egy String lesz.

"There are " ++ 5 ++ " teams."
"There are 5 teams."

Stringek is ugyanúgy indexelhetők, akárcsak az egyszerű sorozattípusok.

A print és printLn függvények használatával szöveges üzeneteket küldhetünk a képernyőre. Valójában minden értéken használható, mert minden paramétere String-é konvertálódik.

Direkt szorzat típus

A rendezett n-esek (tuple-ök) hasonlók a más nyelvek rekord típusaihoz. Névvel nem lehet rájuk hivatkozni, azonban indexelhetők. Tuple-öket egyszerű zárójelezésekkel lehet létrehozni, több komponenst beleírva:

(<expression>,...)

Például:

(12, true, ”Hello”)

Ugyanabból a típusból nem lehet tupple-öket létrehozni.

Az egyes komponensekre 1-től kezdődő pozíciószámukkal lehet hivatkozni.

a.1

Unió típus

Kidolgozásra vár.

Halmaz típus

A felsorolások általános leírását lásd a tömböknél.

A halmazok minden elemet csak egyszer tartalmaznak. A halmazokat mindenütt használhatjuk, ahol a sorozatokat is, implicit konvertálódnak, ha szükséges. A sorrend azért határozott, hogy elkerülhessük a nem-determinisztikus működést.

Egyszerűen felsorolva az elemeket:

nums = {1,2,3,4,5};
{1,2,3,4,5}

Vagy részhalmazát képezhetjük egy másik néven logikai egy feltétellel:

odds = { x is nums when x mod 2 == 0 };
{2,4}

Típuskonverziók

Kidolgozásra vár.

Változók, konstansok

A Fables egy nem tisztán funkcionális nyelv, lehetőséget ad változók és referenciák használatára. Minden egyéb szerkezet, ami nem változó, konstans jellegű. A változók szolgálnak a modell és az ágensek állapotainak eltárolására. A változóknak egészen addig nincs értéke, amíg értéket nem kap egy értékadáson keresztül.

A változó-deklaráció általános formája a következő:

var <name>;

Kifejezések, operátorok

Aritmekai kifejezések

A numerikus kifejezések nagyban hasonlítanak a Java numerikus kifejezéseire, kivéve, hogy legalább egy számjegyet meg kell adni a tizedespont után.

A következő példák mutatják a rem és mod közötti különbségeket.

17 mod 3 2 17 mod -3 -1 -17 mod 3 1 -17 mod -3 -2
17 rem 3 2 17 rem -3 2 -17 rem 3 -2 -17 rem -3 -2

Logikai kifejezések

A Fables két előre definiált konstanssal rendelkezei,t ezek az true és false, és három logikai operátorral, ezek az unáris not és a bináris and és or.

A Fables univerzális összehasonlító operátorokkal is rendelkezik, amelyeket bármely típusra lehet lakalmazni, ezek az egyenlőségvizsgálat ill. a nem egyenlőség vizsgálatai: == ill. <>.

Példák:

A = true  ; B = false ; tautology()     = A or  not A ; contradiction() = B and not B ; implication(a, b) = (not a) or b ; lesser(x, y) = x < y ; between(x, y, z) = x < y < z;