Class PointA { Property x=0~ Property Y=0~ Operator "=" (n1) { n=group(n1) if n.x=.x Then if n.y=.y then push true : exit push false } Module Print { Print "Point" , .x, .y } Class: Module PointA { \\ ? means optionally Read ? .[x], .[y] } } Class Circle { Property R=300~ ' type single Operator "=" (n1) { n=group(n1) n2=This ' get a copy of this to check n against n2 if valid(@n as n2) else push false :exit if n.x=.x Then if n.y=.y then if n.r=.r then push true : exit push false } Module Print { Print "Circle", .x, .y, .r } Class: Module Circle { if match("nn") then { M=PointA(Number, Number) } Else.if match("G") then { M=PointA() Read M } Else M=PointA() M=This \\ If match("N") then Read M.r \\ check if a number is in top of stack \\ Read ? M.r \\ optionally Read M.r \\ for this example, r has value, so this used if stack is empty. This=M } } A=PointA(10,3) C=Circle(20,10,5) D=Circle(A, 100) B=A K=PointA() Z=Circle(A) P=PointA(600,700) \\ N is a pointer to array N=(A, B, C, D, K, P, Z) M=each(N) While M { For This { \\ a copy in MM MM=Array(M) MM.Print Print A=MM, D=MM ' using MM=A interpreter use "=" from MM } } \\ pA is a pointer to D (a named group) pA->D Print pA=D, pA=Z pA=>Print \\ pA is a pointer to a copy of D (a float group) pA->(D) Print pA=D, pA=Z pA=>Print \\ rA is a reference to D (& is optional in Link statement) Link &D to &rA rA.Print