% Input Data \label{s:indata} \sectiondept{it} The implementation \shall accept input in a manner described by \sref{hostenv-qs}. \p{indata} The implementation \shall accept dynamic input data as an associative array of values whereby the key represents the name of the input parameter and its associated value is a vector of (a)~character strings or (b)~an arbitrarily deep array of character strings. An implementation \shall support at least a vector of character strings to satisfy condition~(b), but \may choose to support a greater depth for implementation-specific data. \p{indata-vscalar} When a scalar is expected, an implementation \shall also accept a vector $v$, but \shall recognize only the first index $v_0$ of the vector and \shall act as though $v_0$ was the provided scalar. An implementation \shall implicitly return all undefined parameter requests as the scalar floating-point value $0.00$. This includes undefined indexes on defined parameters as well as undefined indexes on undefined parameters. \p{determ} The implementation \shall be ^[deterministic]---that is, its operation \shall be controlled exclusively by its input data and not by external state such as the current date or time of day, unless such data are passed as input data as defined by \pref{indata}. If an implementation relies on a ^[input data!third-party service] for a calculation~$c$, then the implementation is \exempt from the requirements of \pref{determ} only so far as is necessary to retrieve the data from the third-party service and populate~$c$; no other exemptions are permitted. If multiple arguments are provided for the same ^parameter name, the implementation \must fail in error, unless an implementation cannot be aware of such a condition.\footnote{As an example, a ^JavaScript object literal with duplicate fields does not throw an error, but instead silently drops duplicates.} \index{parameter type|(} \section{Parameter Type Definitions} \label{s:paramtypes} \sectiondept{it} An implementation \may use alternative names for these types, or neglect to implement the types at all, so long as the output and error conditions of the implementation cannot be distinguished in any way from an implementation that does implement the parameter types defined in this section. \begin{ex} If a parameter type is simply an ^[parameter type!alias] of another type, an implementation may decide to use the corresponding base type. If a parameter type is simply a restriction on its base type, an implementation may apply such a domain restriction however it sees fit---e.g., a block of conditionals. \end{ex} \subsection{Base Parameter Types} \sectiondept{it} The parameters defined within this section are not derived from any other parameter types and are known as \dfn{parameter type!base parameter types}. All other parameter types not defined within this section \shall be derived from these base types; such parameters are known as \dfn{parameter type!derived parameter types}. \begin{description} \typedef core bool: Boolean---any datatype able to hold a `yes' or `no' value ($1$ or $0$ respectively) \typedef core float: Single-precision binary floating-point number (as defined by IEEE 754 binary32) \typedef core int: Any signed 32-bit integer \end{description} \index{parameter type|)} %% content set with \inputtypes will be outptu at this point