|
FUNCTION simplify_maths_space (spc : maths_space) : maths_space; LOCAL stypes : SET OF STRING := stripped_typeof ( spc ) ; sset : SET OF maths_value ; zset : SET OF maths_value := [ ] ; zval : maths_value ; zspc : maths_space ; zallint : BOOLEAN := TRUE ; zint , zmin , zmax : INTEGER ; factors : LIST OF maths_space ; zfactors : LIST OF maths_space := [ ] ; rspc : maths_space ; END_LOCAL ; IF 'finite_space' IN stypes THEN sset := spc \ finite_space . members ; REPEAT i := 1 TO SIZEOF ( sset ) ; zval := simplify_maths_value ( sset [ i ] ) ; zset := zset + [ zval ] ; IF zallint AND ( 'integer' IN TYPEOF ( zval ) ) THEN zint := zval ; IF i = 1 THEN zmin := zint ; zmax := zint ; ELSE IF zint < zmin THEN zmin := zint ; END_IF ; IF zint > zmax THEN zmax := zint ; END_IF ; END_IF ; ELSE zallint := FALSE ; END_IF ; END_REPEAT ; IF zallint AND ( SIZEOF ( zset ) = zmax - zmin + 1 ) THEN RETURN ( make_finite_integer_interval ( zmin , zmax ) ) ; END_IF ; RETURN ( make_finite_space ( zset ) ) ; END_IF ; IF 'uniform_product_space' IN stypes THEN zspc := simplify_maths_space ( spc \ uniform_product_space . base ) ; RETURN ( make_uniform_product_space ( zspc , spc \ uniform_product_space . exponent ) ) ; END_IF ; IF 'listed_product_space' IN stypes THEN factors := spc \ listed_product_space . factors ; REPEAT i := 1 TO SIZEOF ( factors ) ; INSERT ( zfactors , simplify_maths_space ( factors [ i ] ) , i - 1 ) ; END_REPEAT ; RETURN ( make_listed_product_space ( zfactors ) ) ; END_IF ; IF 'extended_tuple_space' IN stypes THEN zspc := simplify_maths_space ( spc \ extended_tuple_space . base ) ; rspc := simplify_maths_space ( spc \ extended_tuple_space . extender ) ; RETURN ( make_extended_tuple_space ( zspc , rspc ) ) ; END_IF ; IF 'function_space' IN stypes THEN zspc := simplify_maths_space ( spc \ function_space . domain_argument ) ; rspc := simplify_maths_space ( spc \ function_space . range_argument ) ; RETURN ( make_function_space ( spc \ function_space . domain_constraint , zspc , spc \ function_space . range_constraint , rspc ) ) ; END_IF ; RETURN ( spc ) ; END_FUNCTION; -- simplify_maths_space |
|
public class FSimplify_maths_space public static Value run(SdaiContext _context, Value spc) |