Overview Schemas Index

MATHEMATICAL_FUNCTIONS_SCHEMA (jsdai.SMathematical_functions_schema)


FUNCTION substitute
          (expr : generic_expression, vars : LIST [1:?] OF generic_variable, vals : LIST [1:?] OF maths_value) : generic_expression;

 LOCAL types : SET OF  STRING := stripped_typeof ( expr ) ; opnds : LIST  OF  generic_expression ; op1 , op2 : generic_expression ; qvars : LIST  OF  generic_variable ; srcdom : maths_space_or_function ; prpfun : LIST [ 1 : ? ] OF maths_function ; finfun : maths_function_select ; END_LOCAL ; IF  SIZEOF  ( vars ) <> SIZEOF  ( vals ) THEN  RETURN  ( ? ) ; END_IF  ; IF  'generic_literal' IN  types THEN  RETURN  ( expr ) ; END_IF  ; IF  'generic_variable' IN  types THEN  REPEAT  i := 1 TO  SIZEOF  ( vars ) ; IF  expr :=: vars [ i ] THEN  RETURN  ( vals [ i ] ) ; END_IF  ; END_REPEAT  ; RETURN  ( expr ) ; END_IF  ; IF  'quantifier_expression' IN  types THEN  qvars := expr \ quantifier_expression . variables ; REPEAT  i := SIZEOF  ( vars ) TO  1 BY - 1 ; IF  vars [ i ] IN  qvars THEN  REMOVE  ( vars , i ) ; REMOVE ( vals , i ) ; END_IF  ; END_REPEAT  ; opnds := expr \ multiple_arity_generic_expression . operands ; REPEAT  i := 1 TO  SIZEOF  ( opnds ) ; IF  NOT ( opnds [ i ] IN  qvars ) THEN  expr \ multiple_arity_generic_expression . operands [ i ] := substitute ( opnds [ i ] , vars , vals ) ; END_IF  ; END_REPEAT  ; RETURN  ( expr ) ; END_IF  ; IF  'unary_generic_expression' IN  types THEN  op1 := expr \ unary_generic_expression . operand ; expr \ unary_generic_expression . operand := substitute ( op1 , vars , vals ) ; END_IF  ; IF  'binary_generic_expression' IN  types THEN  op1 := expr \ binary_generic_expression . operands [ 1 ] ; expr \ binary_generic_expression . operands [ 1 ] := substitute ( op1 , vars , vals ) ; op2 := expr \ binary_generic_expression . operands [ 2 ] ; expr \ binary_generic_expression . operands [ 2 ] := substitute ( op2 , vars , vals ) ; END_IF  ; IF  'parallel_composed_function' IN  types THEN  srcdom := expr \ parallel_composed_function . source_of_domain ; prpfun := expr \ parallel_composed_function . prep_functions ; finfun := expr \ parallel_composed_function . final_function ; srcdom := substitute ( srcdom , vars , vals ) ; REPEAT  i := 1 TO  SIZEOF  ( prpfun ) ; prpfun [ i ] := substitute ( prpfun [ i ] , vars , vals ) ; END_REPEAT  ; IF  'maths_function' IN  stripped_typeof ( finfun ) THEN  finfun := substitute ( finfun , vars , vals ) ; END_IF  ; RETURN  ( make_parallel_composed_function ( srcdom , prpfun , finfun ) ) ; END_IF  ; IF 'multiple_arity_generic_expression' IN types THEN opnds := expr \ multiple_arity_generic_expression . operands ; REPEAT i := 1 TO SIZEOF ( opnds ) ; expr \ multiple_arity_generic_expression . operands [ i ] := substitute ( opnds [ i ] , vars , vals ) ; END_REPEAT ; END_IF ; RETURN ( expr ) ; 

END_FUNCTION; -- substitute

public class FSubstitute
          public static Value run(SdaiContext _context, Value expr, Value vars, Value vals)