128 Geometry Example


// Component:  geometry

value Point
{
    Real x;
    Real y;
}

@domain("A circle which is a locus of points in ℝ^2")
value Circle
{
    @predicate("The centre of the circle is [centre]")
    Point centre;

    @predicate("The radius of the circle is [radius]")
    Real radius;
}

entity Wheel
{
    embed Circle;
    Real mass;
}

var x = 10;
var s = "hello";
var y = x + 1;
var p = Point { x = 3.2, y = 4.7 };
var c = Circle { centre = geometry.Point { x = 1.0, y = 2.0 }, radius = 5.0 };
var r = c.radius;
r := r + 1;
print p,c,r;


/*
Alternative embed forms:

value Circle
{
    Point centre;
    Real radius;
}

entity Wheel
{
    embed Circle;               // get centre and radius
    Real mass;
}

entity Wheel
{
    embed Circle as circle;     // get circle, centre, radius
    Real mass;
}
*/