| 'DOCUMENTATION' | ~~ the @reduce library allows you to reduce RPN expressions that are enclosed within curly braces inside of a tuple . here's an example of how to use it : '' (@reduce snake = x is { 2 3 + 4 * } and y is { 10 7 - } .) this will result in the following : 'snake' x is 20 and y is 3 also note that you can replace the stack name with @main to push the result to the main stack . || '@include' lib/math.nv | '' (@reduce .) | '' convert output stack to tuple | '' (@reduce $stack =) | '' @reduce 'destination' $stack | '' (@reduce {) '@math' $result | '' (@reduce { $result) | '' (@reduce { $result }) | '' @reduce 'output' $result | '' (@reduce { $a $b +) | '' (@reduce {) '@math' add $a $b | '' (@reduce { $a $b -) | '' (@reduce {) '@math' subtract $a $b | '' (@reduce { $a $b *) | '' (@reduce {) '@math' multiply $a $b | '' (@reduce { $a $b /) | '' (@reduce {) '@math' divide $a $b | '' (@reduce { $a $min $max wrap) | '' (@reduce { $result) '@js' const a = Number($a), min = Number($min), max = Number($max); $result = a; if (a < min) $result = max; if (a > max) $result = min; | '' (@reduce $word) | '' @reduce 'output' $word | '' convert $stack stack to tuple 'destination' $destination | '@js' let destination = $destination == "@main" ? "" : $destination; f(destination, ...stacks[$stack].map(fact => fact.join(" "))); delete stacks[$stack];