Literals

A literal expression consists of one or more of the numerical/letter forms described earlier. It directly describes a numbers, characters, booleans, containers and constructs.

There are two type of literals:

  • values
  • calls

Value literals

Value literals are the simpliest expressions. They are direct values assigned to variables and are divided into two types:

  • singletons
  • clusters

Singelton literals

Singleton literals represent one sigle values:

4 // intiger literal 0xA8 // hex-intiger literal 4.6 // floating-point literal 5i // imaginary literal "c" // character literal "one" // string literal true // boolean literal

Cluster literals

Cluster literals represent both container types and construct types. Cluster literals are always enclosed within curly brackets { }. The difference between scopes and cluster literals is that cluster literals shoud always have comma , within the initializaion and assignment brackets, e.g { 5, }.

Containers

Some simple container expressions

{ 5, 6, 7, 8, } // array, vector, sequences { "one":1, "two":2, } // maps { 6, } // single element container

A 3x3x3 matrix

{{{1,2,3},{4,5,6},{7,8,9}},{{1,2,3},{4,5,6},{7,8,9}},{{1,2,3},{4,5,6},{7,8,9}}}

Constructs

// constructs { email = "someone@example.com", username = "someusername123", active = true, sign_in_count = 1 } // nested constructs { FirstName = "Mark", LastName = "Jones", Email = "mark@gmail.com", Age = 25, MonthlySalary = { Basic = 15000.00, Bonus = { HTA = 2100.00, RA = 5000.00, }, }, }

Call literals

Call literals are function calls that resolve to values:

var seven: int = add(2, 5); // assigning variables "seven" to function call "add"

`typ Vector: rec = { var x: flt var y: flt }

typ Rect: rec = { var pos: Vector var size: Vecotr }

fun make_rect(min, max: Vector): Rect { return [Rect]{{min.x, min.y}, {max.x - max.y, max.y - max.y}} return [Rect]{pos = {min.x, min.y}, size = {max.x - max.y, max.y - max.y}} }

`