'if' [
'call the branch if true' [
true 1 true [ pop ] if
] can
'do nothing if false' [
true false [ 1 ] if
] can
] describe
'if-else' [
'call the first branch if true' [
true :false :true if-else
] can
'call the second branch if false' [
false :true :false if-else
] can
] describe
'call' [
'call the block at the top of the stack' [
[ 3 3 = ] call
] can
] describe
'without' [
'call the second element' [
false :not 'blocking' without pop
] can
'allow drop to ignore top element' [
1 2 3 :drop 4 without
size 1 =
swap 4 =
and
] can
] describe
'without2' [
'call the second element' [
false :not 'this' 'that' without2
pop pop
] can
] describe
'under' [
'call the top element while removing the second element' [
false 'blocking' :not under pop
] can
] describe
'under2' [
'call the top element while removing the second and third elements' [
false 'this' 'that' :not under2
pop pop
] can
] describe
'while' [
'perform an action on the top of the stack' [
1 2 3 4 5 :dec [ dup zero? ! ] while
0 =
[ 4 = ] under and
[ 3 = ] under and
[ 2 = ] under and
[ 1 = ] under and
] can
'perform an action on an empty stack' [
[ 1 ] [ size 3 > ] while
1 =
[ 1 = ] under and
[ 1 = ] under and
] can
] describe
'until' [
'perform a loop, with the inverse condition to while' [
5 :dec [ dup zero? ] until
0 =
] can
] describe
'times' [
'call a block multiple times' [
300 :inc 5 times
305 =
] can
] describe