Generic name reference restriction, intended to be generic enough to work with most systems (supporting both C-style and Lisp-style identifiers). The systems that implement this schema should perform their own, more strict, type checks. Valid value for constants. Documentation for a specific element. The documentation must not be sparse; please provide something descriptive that will be useful to someone completely new to the code. Single-character index variable Symbol used to represent an entity when rendered. The string should consist of TeX/LaTeX commands and should produce a single symbol. Abstract operator type used to classify elements as operators. Operators are portions of the calculation that perform a portion of the calculation. For example, a summation would classify as an operation (operator), but value-of would not (as it is only representing a value, but not performing a calculation). Elements/attributes common to all operator types (see the operator element for a description on what qualifies as an operator). All operators may include child calculations. Furthermore, they may be labeled and may have an identifier associated with their result. Optional identifier with which the result of the calculation may be referenced. Optional description of a calculation. @label is used in place of @desc to ensure that it is not confused with the otherwise required @desc attribute. @desc should be used to describe a value that is generated by a calculation and should not otherwise be used (e.g. with lv:sum/@generate) This is different from @label, which provides a high-level description of what the equation is doing. @desc describes what the generated value is. Allows for the definition of an index variable which will be defined for all children of the operation. Represents a summation (addition) of a set of values. If @of is used, the equation defined by child elements will be iterated using an index on the set provided by @of. If no equation is given, all elements in the set identified by @of will be summed. If @of is omitted, the result of each child element will be summed. This operator should also be used for subtraction by summing negative values. Iterate over all values of this set. Must be a set. Optional name of a set to generate from this expressions. Generators are compatible only with @of and a sub-expression. Symbol to use when typesetting the generator Yield precision Represents the product (multiplication) of a set of values. If @of is used, the equation defined by child elements will be iterated using an index on the set provided by @of. If no equation is given, all elements in the set identified by @of will be multiplied. If @of is omitted, the result of each child element will be multiplied. While this operator may also be used for division by multiplying by the inverse of a number (n^-1), a limited quotient operator is provided for clarity and convenience. Iterate over all values of this set. Must be a set. Optional name of a set to generate from this expressions. Generators are compatible only with @of and a sub-expression. Symbol to use when typesetting the generator Dot product of any number of vectors Yield precision Represents the quotient (division) of two values. This operator is to be thought of as a fraction: the numerator is identified by the first child element and the denominator the second. While the summation operator may also be used for division by multiplying by the inverse of a number (n^-1), this limited operator is provided for clarity and convenience. Exponent; the first child node is the base, the second is the order. Construct a list using the given element and an existing list This is analogous to lisp's cons; the first argument is the car and the second is the cdr. Retrieve the first element of a list Analogous to lisp's car. Return the list without its first element If the list contains only one element, then an empty list will be returned. Analogous to lisp's cdr. Retrieves the length of a vector Denotes a function application. The result of the function identified by @name will be used in place of the call. The application may optionally accept an argument list (if the function accepts arguments). Name of the function to apply Represents an argument to be applied to a function. Name of the parameter to apply to the function Recursively applies the current function. All arguments are copied to the argument list of the function application unless overridden. Converts the given value to an integer, rounding up if necessary (e.g. 0.1 => 1) Value precision to consider for rounding. Converts the given value to an integer, rounding down if necessary (e.g. 0.9 => 0) Value precision to consider for rounding. Creates a set out of its siblings Outputs the result of the contained expression to the console and returns its value. Defines a condition under which the expression will yield one if true, otherwise will be strongly zero (zero even if undefined) More flexible alternative to the @index attribute on elements; supports calculations for determining the index Returns the value associated with the given identifier. An identifier for which the value should be retrieved Allows for the definition of an index variable which will be defined for all children of the operation. Optional description of a calculation. @label is used in place of @desc to ensure that it is not confused with the otherwise required @desc attribute. Returns @value. This element simply enforces documentation and prevents the use of magic values. Value of constant (must be within the domain of its @type) Type (domain) of the constant (inferred when not provided) Description of the value explaining its intent Optional description of a calculation. @label is used in place of @desc to ensure that it is not confused with the otherwise required @desc attribute. Represents a list of cases for a calculation. Optional description of the case Optional description of the case Optional description of the case set Declares variables visible within the let block. This exists as a means of assignment for re-using values. Declares a list of values to define for this block Declares a value that will remain in scope for the let block Variable name Variable datatype Vector/matrix; if omitted, implicitly scalar. Describe the purpose of the value Represents every element that can be used to perform a calculation. Implementors may use this group to accept any type of calculation. Root calculation node; this should be the entry point for any type of calculation. This helps to ensure that certain nodes are only used at the beginning of a calculation (such as cases).