Data

ngl describe any information (a concrete data, an idea, an action etc...) as a ngl:data It is the most generic type. In ngl we don't talk about types but concepts (ngl:data:concept), the difference is theorical and can be demonstrated like this

ngc:function sum
{
    ngc number <a>
    ngc number <b>
}
ngl:sum<4,4> // ok
ngl:sum<4,[four]> // ok
// pseudo code
/en[english comment]
/fr[commentaire en fran├žais !]
function sum(number, number)
{
}
sum(4,4) // ok
sum(4,"four") // type system error

[4.1] Concept

A concept is a ngl:data owned and described by a ngl:entity

[4.1.1] Intrinsic

  • ngc:and
  • ngc:element
  • ngc:many
  • ngc:not
  • ngc:or
  • ngc:range
  • ngc:sequence
    • ngc:static (a number, an object)
    • ngc:dynamic (a function, a process, an entity)
ngc:array<ngl:int> ar // incomplete parametrization

// merge concepts using an expression
(ar & ngc:dynamic) dynamic_array

ngc:array
{
    <ngc> data_type // ngc & dynamic -> no match
    <ngc::size> // ngc:number & dynamic -> allow size to change, parameterization complete
    // default storage : stack -> dynamic size not allowed
    // search for a dynamic storage with minimal condition -> heap and database found
    // database -> ngc:dynamic & ngc:persistent
    // heap -> ngc:dynamic -> select heap
}

// add concepts
(ar + ngc:sort) sortable_array

[4.2] Concrete

A concrete is a ngl:data representing the concretization of a ngl:concept in the ngl:entity storage.

// integer array, deduced
[16 51 156]

// digit array
<ngc:digit>[1 6 5 1 1 5 6]

// boolean array
<ngc:boolean>[01101001]
X[00 22 FA]
B[1011010001]
S[coucou c'est moi]

// binary array
<ngc:hexa>[00 22 FF 78]

// string, deduced
[test]

// string, parameterization required, nc can't deduce the concept associated to the shape
<ngc:string>[0123]


// string containing []
[__[ ngs:return begin pattern
ngs:return ]__] end pattern

[__[
use [this] to create "concrete" datas
with multilines
]__]


[[]] // concrete using array of array
[_[]_] // concrete using pattern

[
    [ [123 000] [456 000] ]
    [ [123 000] [456 000] ]
]

[4.3] Shape

[4.4] Variable

[4.5] Type

[4.5.1] Arrays

ngc:array<ngc:int> array [0 1 2 3]
ngc:array<ngc:int> [array1 array2]

ngc:int[0 1 2 3]
ngc:bool[01001011010]
ngc:hexa[FF00FF]

[4.5.2] Enum

An enum is an array of identifiers

ngc:array<ngl:identifier, 4> color_enum [red blue yellow]

//

// 3 identifiers from ngc:color
ngc:color [red blue yellow]

// loop on color identifiers
ngl:loop<ngl:meta<ngc:color>.edges>
{
    // ngl:meta<red>.name
    // ar<red> // ar expect ngc:int,  ngl:meta<red>.index
}

//

// all fields required
ngc <color>
{
    ngc:string name
    ngc:hexa rgb
}

1/description/                   ngc:color<[Red], [FF0000]> red
2/description, syntax2 /         ngc:color<> red{ [Red], [FF0000] }
3/alias parameterization/        ngl:alias<red, ngc:color<[Red], [FF0000]>>
4/alias description of concrete/ ngl:alias red ngc:color<[Red], [FF0000]>
5/edge description of concrete/  ngl:edge<alias> red ngc:color<[Red], [FF0000]>

ngc:color red
{
    .name [Red]
    .rgb [FF0000]
}

ngc:color<.name [Red], .rgb [FF0000]> red
ngc:color<.name [Blue], .rgb [0000FF]> blue

// custom shape
ngs:custom_color ngc:color
{
    red FF0000 [Red]
}