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.
Precedencia | Operátor | Asszociativitás |
1 | \| @ | bal |
2 | \|\| ? | jobb |
3 | & | jobb |
4 | = != > < | bal |
5 | - ^ | bal |
6 | / | bal |