created: 20211124151912931 modified: 20211124160747921 tags: [[Filter Syntax]] [[Reduce Filter Run Prefix]] [[Filter Run Prefix Examples]] title: Reduce Filter Run Prefix (Examples) type: text/vnd.tiddlywiki \define multiply-input() [multiply] The following examples use these data tiddlers: <<.operator-example 1 "[tag[shopping]] :reduce[get[quantity]add]">> <<.operator-example 2 "[tag[shopping]] :reduce[get[price]multiply{!!quantity}add]">> <<.operator-example 3 "[tag[shopping]] :reduce[compare:number:gt[0]thenaddsuffix[, ]addsuffixelse]" "Uses `` to act differently on the first item than the rest. Just for demonstration. Better to use the [[join Operator]] to accomplish this task">> <<.operator-example 4 "[tag[non-existent]] :reduce[get[price]multiply{!!quantity}add]" "Empty input produces empty output">> <<.operator-example 5 "[tag[non-existent]] :reduce[get[price]multiply{!!quantity}add] :else[[0]]" "Use `:else` to ensure output if input was empty">> <$macrocall $name=".tip" _="""Unlike the [[reduce Operator]], the `:reduce` prefix cannot specify an initial value for the accumulator, so its initial value will always be empty (which is treated as 0 by mathematical operators). So `=1 =2 =3 :reduce[multiply]` will produce 0, not 6. If you need to specify an initial accumulator value, use the [[reduce Operator]]."""/> <<.operator-example 6 "=1 =2 =3 :reduce[multiply]" "Empty initial value is treated as 0 by mathematical operators">> <<.operator-example 7 "=1 =2 =3 +[reduce,[1]]" "Setting initial value is sometimes necessary for correct results">>