Az OPA programozási nyelv

Típusok

Egyszerű típus

Integer

Több féleképpen adhatjuk meg az egész literálokat:

x = 10 // 10-es alapú számrendszerbeli, értéke: 10 x = 0xA // 16-os alapú számrendszerbeli, értéke: 10 x = 0o12 // 8-as alapú számrendszerbeli, értéke: 10 x = 0b1010 // 2-es alapú számrendszerbeli, értéke: 10

String

A karakterlánc literál megadása hasonló a C/Java/JavaScript nyelvekéhez, amely utf8 kódolású. A ' … ' között nem megengedett a string megadása.

x = ”hello!” x = ”\”” //speciális karakter megadása

Engedélyezett tetszőleges kifejezés beszúrása a szövegbe.

x = ”1+2 is {1+2}” //kifejezéseket szúrhatunk be a ,- között //kiértékelése ”1+2 is 3”

A következő karaktereket kiértékeli a string literálon belül.

{ , } , ” , \ , \n , \r , \t , \’ , \”

Float

A lebegőpontos literálokat két módban írhatjuk fel:

x = 12.21 x = .21 // el lehet hagyni az egész részt x = 12. // fordítva is x = 12.5e10

Adatstruktúrákk

Record

A mezőnevekben engedélyezett karakterek megegyeznek az azonosítókban használhatókkal. Az alábbiak szerint definiálhatunk rekordokat.

x = {} // üres record x = {a:2. b:3} // egy record "a" és "b" mezővel x = {a:2, b:3,} // később bővíthető újabb mezővel x = {'[weird-chars]' : "2"} // különleges karakter a mező neve x = {a} // jelentése {a:void} x = {a, b:2} // jelentése {a:void, b:2} x = {~a, b:2} // jelentése {a:a, b} x = ~{a, b} // jelentése {a:a, b:b} x = ~{a, b, c:4} // jelentése {a:a, b:b, c:4} x = ~{a:{b}, c} // jelentése {a:{b:void}, c:c} x = {a:1, b:{c:"mlk", d:3.}} y = {x with a:3} // jelentése {a:3, b:x.b} y = {x with a:3, b:{e}} // bővíthető újabb mezővel

Tuple (record)

A tuple rekord mezőinek típusa nem kell hogy megegyezzen.

x = (1,"mlk",{a}) // tuple rekord 3 mezővel x = (1,"mlk") // tuple rekord 2 mezővel

Tuple szabványos kifejezés: N-tuple egy rekord f1, ..., fn mezőkkel. Ezeket létre lehet hozni és módosítani ugyan úgy mint egy rekordot.

x = (1,"hello") @assert(x == {f1 : 1, f2 : "hello"}); @assert(x.f1 == 1); @assert({x with f2 : "goodbye"} == (1,"goodbye"));

Lista

Az Opában is megtalálhatóak a listák, mint oly sok más nyelvben is, és következő képen adhatjuk meg őket:

x = [] // üres lista x = [3,4,5] // háromelemű lista y = [0,1,2|x] // y lista végéhez fűzi az x listát // eredmény: [0,1,2,3,4,5]

Szabványosan következő képen építhetünk fel egy listát, melyek értéke megegyezik az előbb felsorolt listákkal.

list x = {nil} list x = {hd:3, tl:{hd:4, tl:{hd:5. tl:{nil}}}} list y = {hd:0, tl:{hd:1, tl:{hd:2, tl:x}}}

Operátorok

A nyelvben mindkét operátor használat megengedett és természetesen ekvivalensek egymással:

x = 1 + 2 x = '+'(1,2)

Infix operátor csak egy azonosító lehet, az alábbi listából:

+ \ - ^ * / < > = @ | & !

A meglévő operátorok mellett, lehetőségünk van új operátor definiálására is.

'**' = Math.pow_i x = 2**3 // x = 8

Az alábbi táblázat mutatja az operátorok asszociativitását.

PrecedenciaOperátorAsszociativitás
1\| @bal
2\|\| ?jobb
3&jobb
4= != > <bal
5- ^bal
6/bal