We constructed this figure by using the Create tool in the palette on the upper-left to create three points, which the system automatically named a , b , and c . We then drew a filled triangle using the tools for MoveTo , LineTo , Close , and Fill , which are in the predefined PS module. The system simultaneously added variable declarations and drawing commands to the program view. We then clicked in the two congruence constraints using the predefined Cong tool. Its drawing operations are those of PostScript, its control constructs are those of Dijkstra's guarded commands, and its value space is like that of Lisp.
Declarative constraints are an integral part of the language.
A Juno-2 constraint is simply a predicate on program variables. In Juno-2, constraints are solved only in the course of initializing local variables. Since the constraints themselves are declarative, users can write simple predicates rather than complex computations of values and coordinates. There are two solutions to the constraint, but the solver will converge on the positive square root, since the hint for x is positive. The language is dynamically typed.