A Pliant nyelv

Típusok, típuskonstrukciók

Típusszerkezet

Új típus megadásakor a "<-" -lal kezdőértéket adhatunk.

type Pair
  field Int x y <- 0

Elemi típusok

Diszkrét típus(ok)

Egész számok 5 -12 2Ch 0B74Eh 10010010b

A hexadecimális számoknak egy decimális számjeggyel kell kezdődniük és egy kis "h"-val kell véget érniük. A bináris számok végén egy kis "b" betű áll.

Valós típus(ok)

Lebegőpontos számok

10.3 -1.27e-3

Float

var Float f
var Float32 f
var Float64 f

Mutató és referencia típus(ok)

A "typeof" kulcsszóval az adatok típusát kérhetjük le.

var Pointer:Type t :> typeof 3 console t:name eol
A "typeof" az eredeti adat típusát adja vissza, így referenciát kapunk vissza.
A "typeof" a fordító szemantikai szintjén dolgozik, nem a végrehajtás szintjén.

Típuskonstrukciók

Tömb típus(ok)

A tömb egy olyan halmaz, aminek ha n eleme van, akkor mindegyik elemhez tartozik egy index 0 és n-1 között, így minden elemhez biztosított a közvetlen hozzáférés. var Array:xxx a
var xxx e
var Int i
var Pointer:xxx p

Egy elem elérése:
p :> a i

Direkt szorzat típus

Kidolgozásra vár.

Unió típus

Kidolgozásra vár.

Halmaz típus

A dictionary egy rendezetlen halmaz. Minden elem a beszúráskor kap egy kulcsot.

var (Dictionary xxx yyy) d
var xxx k
var yyy e
var Pointer:yyy p
var Int i
var CBool c


Új elem beszúrása/törlése:

p :> d insert k e
p :> d remove p
d -= p # same as 'd remove p'

Típuskonverziók

Kidolgozásra vár.

Változók, konstansok

A lokális változókat "var" -ral, a globális változókat "gvar" -ral jelöljük. A konstans egy globális változó, ami a létrehozáskor kap egy állandó értéket, így később nem módosítható.

constant million 10^6

Kifejezések, operátorok

Összefűző és elválasztó operátorok

Az összefűzés operátora a ':'. Például az
abc:def:ghi:jkl
sztringet így értelmezzük:
(((abc def) ghi) jkl)
A szétvágó operátor a ';' . Például az
abc def ; ghi jkl mno ; pqr stu
sztringet így értelmezzük:
{ (abc def) (ghi jkl mno) (pqr stu) }

Értékadás

abc def := ghi jkl mno
jelentése:
( ':=' (abc def) (ghi jkl mno) )

Logikai utasítások

not felt
felt1 and felt2
felt1 or felt2
Precedencia (csökkenő sorrendben) : not, and, or
c1 or not c2 and c3
is equivalent to
c1 or ((not c2) and c3)

Aritmetikai műveletek

a+b Összeadás
-a Negáció
a-b Kivonás
a*b Szorzás
a\b Egész osztás
a/b Lebegőpontos osztás
a%b Modulus
a^b Hatványozás

A '-' operátor viselkedése egy kicsit komplexebb:

Kifejezés Jelentés
a - b ('-' a b)
a -b (a ('-' b))
a-b ('-' a b)

Egyéb operátorok

.not. .or. .and. .xor. bináris operátorok megfelelnek a C nyelv ~ | & ^ operátorainak.
.+. .-. .*. .^. operátorok hasonlóak a + - * ^ operátorokhoz, csak nem okoznak túlcsordulást.
Például egy 32 bites környezetben,

2*10^9+10^9

túlcsordulást okoz, míg

2*10^9.+.10^9

nem fog túlcsordulni.

Eredmény operátor

->
Ez jelöli a függvény visszatérési értékét.

Operátor precedenciák

Operátor Prioritás
; 520h
:= :> 510h
unary - 490h
: 410h
^ .^. 330h
* / \ % .*. 320h
+ - .+. .-. 310h
.not. 2A0h
.and. .or. .xor. 290h
< > <= >= = <> 210h
not 130h
and 120h
or 110h