-This tutorial should help you get to grips with rrdtool RPN expressions
-as seen in CDEF arguments of rrdtool graph.
+This tutorial should help you get to grips with RRDtool RPN expressions
+as seen in CDEF arguments of RRDtool graph.
they appear. These operators act on the two values on the stack
preceding them (to the left). Read these two values on the stack
from left to right inserting the operator in the middle. If the
they appear. These operators act on the two values on the stack
preceding them (to the left). Read these two values on the stack
from left to right inserting the operator in the middle. If the
-For example think about "2,1,GT". This RPN expression could be
+For example, think about "2,1,GT". This RPN expression could be
read as "is two greater than one?" The answer to that question is
"true". So the three values should be replaced with "1". Thus the
RPN expression 2,1,GT evaluates to 1.
read as "is two greater than one?" The answer to that question is
"true". So the three values should be replaced with "1". Thus the
RPN expression 2,1,GT evaluates to 1.
("Z") branch. Read the RPN expression "X,Y,Z,IF" from left to
right like so: "if X then Y else Z".
("Z") branch. Read the RPN expression "X,Y,Z,IF" from left to
right like so: "if X then Y else Z".
-For example, consider "1,10,100,IF". It looks bizzare to me.
+For example, consider "1,10,100,IF". It looks bizarre to me.
But when I read "if 1 then 10 else 100" it's crystal clear: 1 is true
so the answer is 10. Note that only zero is false; all other values
are true. "2,20,200,IF" ("if 2 then 20 else 200") evaluates to 20.
But when I read "if 1 then 10 else 100" it's crystal clear: 1 is true
so the answer is 10. Note that only zero is false; all other values
are true. "2,20,200,IF" ("if 2 then 20 else 200") evaluates to 20.
While compound expressions can look overly complex, they can be
considered elegantly simple. To quickly comprehend RPN expressions,
you must know the the algorithm for evaluating RPN expressions:
While compound expressions can look overly complex, they can be
considered elegantly simple. To quickly comprehend RPN expressions,
you must know the the algorithm for evaluating RPN expressions:
-iterate searches from the left to the right looking for an operator,
-when it's found, apply that operator by popping the operator and some
+iterate searches from the left to the right looking for an operator.
+When it's found, apply that operator by popping the operator and some
number of values (and by definition, not operators) off the stack.
For example, the stack "1,2,3,+,+" gets "2,3,+" evaluated (as "2+3")
number of values (and by definition, not operators) off the stack.
For example, the stack "1,2,3,+,+" gets "2,3,+" evaluated (as "2+3")
the stack "1,5,+". Finally, "1,5,+" is evaluated resulting in the
the stack "1,5,+". Finally, "1,5,+" is evaluated resulting in the
operations as:
1) 1,2,3,+,+ eval is 2,3,+ = 5 result is 1,5,+
2) 1,5,+ eval is 1,5,+ = 6 result is 6
3) 6
operations as:
1) 1,2,3,+,+ eval is 2,3,+ = 5 result is 1,5,+
2) 1,5,+ eval is 1,5,+ = 6 result is 6
3) 6
with multiple logic operators:
1) 20,10,GT,10,20,IF eval is 20,10,GT = 1 result is 1,10,20,IF
read the eval as pop "20 is greater than 10" so push 1
with multiple logic operators:
1) 20,10,GT,10,20,IF eval is 20,10,GT = 1 result is 1,10,20,IF
read the eval as pop "20 is greater than 10" so push 1
2) 1,10,20,IF eval is 1,10,20,IF = 10 result is 10
read pop "if 1 then 10 else 20" so push 10. Only 10 is left so
2) 1,10,20,IF eval is 1,10,20,IF = 10 result is 10
read pop "if 1 then 10 else 20" so push 10. Only 10 is left so
4) 0,7000,1024,IF result is 1024
4) 0,7000,1024,IF result is 1024
- 1) input,10,GT,10,input,IF eval is input,10,GT result is A
+ 1) input,10,GT,10,input,IF eval is input,10,GT ( lets call this A )
2) A,10,input,IF eval is A,10,input,IF
2) A,10,input,IF eval is A,10,input,IF
-read "if A then 10 else input". Now replace A it's verbose
-description and--voila!--you have a easily readable description
+read "if A then 10 else input". Now replace A with it's verbose
+description againg and--voila!--you have a easily readable description
the value 128 with "input":
1) input,8,*,7000,GT,7000,input,8,*,IF eval input,8,* result is A
the value 128 with "input":
1) input,8,*,7000,GT,7000,input,8,*,IF eval input,8,* result is A
input,56000,GT,56000,input,IF,8,*
input,56000,GT,56000,input,IF,8,*
-Use tradition notation to show these expressions are not the same.
-Write an expression that's equivalent to the first expression but
+Use traditional notation to show these expressions are not the same.
+Write an expression that's equivalent to the first expression, but
Traditional mathematic expressions are evaluated by
doing multiplication and division first, then addition and
Traditional mathematic expressions are evaluated by
doing multiplication and division first, then addition and
addition before multiplication (etc). RPN does not require
parentheses because the ordering of objects on the stack
can force the evaluation of addition before multiplication.
addition before multiplication (etc). RPN does not require
parentheses because the ordering of objects on the stack
can force the evaluation of addition before multiplication.