pkg(K;V)
Returns a single, indexed list-value containing key-value pairs.
Function type
Scalar only
Syntax
pkg(K;V)
Input
Argument | Type | Description |
---|---|---|
K |
any | The values passed to K are used as keys in the resulting
list-value of key-value pairsA space- or comma-separated list of scalar values |
V |
any | The values passed to V are used as the values in the resulting
list-value of key-value pairsA space- or comma-separated list of scalar values |
K
and values in V
are paired in the order
which each is passed to their respective parameters.Return Value
Returns a single list-value that contains a list of key-value pairs (i.e., a dictionary).
If K
is N/A, an error is returned.
If V
is N/A, an error is returned.
Sample Usage
package="{pkg('a' 'b' 'c'; 1 2 3)}"returns a value called
package
, which itself contains three
key values: a
, b
, and
c
, and three values corresponding to a key:
1
, 2
, and
3
. The values on either side of the
semicolon are paired in order of their appearance. Values can
subsequently be accessed via the following
syntax:<willbe name="test" value="{@package.a}"/>which returns the value
1
. The value can be accessed with
the alternate
syntax:<willbe name="test" value="{@package['a']}"/>
Example
<let package="{pkg('a' 'b' 'c';1 2 3)}"> <willbe name="package_test" value="{@package.a}"/> </let>
The <willbe>
operation in the above <let>
clause
will be a column with the value 1
.
Example: Building keys for value reference
Values in a package may also be accessed using string building to produce key values. The result of any operation used for accessing values must be a valid key for the package being referenced.
<let important_nums="{pkg('pi' 'sqrt_two';3.14159 1.41421)}" op="sqrt_" num="two"> <willbe name="irrational" value="{@important_nums[splice(@op @num;'')]}"/> </let>
The code above will produce a column whose value is 1.41421
. Notice of the
square bracket syntax to improve readability. It is also possible to access the value of the
key pi
in this manner.
<let important_nums="{pkg('pi' 'sqrt_two';3.14159 1.41421)}" op="sqrt_" num="two"> <willbe name="irrational" value="{@important_nums[splice(@op @num;'')]}"/> <willbe name="irrational2" value="{@important_nums['pi']}"/> </let>
Example: Iterating over packages
<foreach>
and <for>
loops can still be used to
iterate over packages. However, since packages do not use integers to locate an index
position some massaging is necessary. This example uses the <letseq>
clause to create multiple values. The second value is a list of package keys created with
the pkg_names(X)
function. The following
code creates a <foreach>
loop that creates a new column for each value
in the package by first creating a list-value of the package keys, then loops over that list
to access each value in the package.
<letseq stooges="{pkg('stooge_1' 'stooge_2' 'stooge_3';'Larry' 'Curly' 'Moe')}" keys="{pkg_names(@stooges)}"> <foreach stooge_num="{@keys}" tally_="@i"> <willbe name="stooge_{@i}" value="'{@stooges.{@stooge_num}}'"/> </foreach> </letseq>