A stack-based language. Words consume values from the stack and push results back.
dup and DUP are the same.( before -- after ) shows a word's effect on the stack.CTRL+SCTRL+ICTRL+OCTRL+H(...)\ ...+( n1 n2 -- n1+n2 )-( n1 n2 -- n1-n2 )*( n1 n2 -- n1*n2 )/( n1 n2 -- n1/n2 )= > <( n1 n2 -- bool )true or false after comparison.'+( s1 s2 -- s1s2 )'*( s n -- s*n )n times.'=( s1 s2 -- s1=s2 )'LEN( s -- n )'I( s n -- s[n] )NOT( bool -- !bool )DUP( a -- a a )DROP( a -- )SWAP( a b -- b a )OVER( a b -- a b a )5 9 over over > .s --- PRINT-STACK --- [0]: false [1]: 9 [2]: 5 ---
PICK( .. xn..x0 n -- ..xn..x0 xn )20 15 10 .s ( [0]: 10 [1]: 15 [2]: 20 <--- ) 2 pick .s ( [0]: 20 <--- [1]: 10 [2]: 15 [3]: 20 )
EMPTY?( -- bool )boolean if the stack is empty.STACK-LEN( -- len ).( a -- ).p or PRINT( a -- a ).s or PRINT-STACK( -- ): <name> ... ;: SQUARE DUP * ; 5 SQUARE . ( prints 25 )
<cond> IF ... THEN<cond> IF ... ELSE ... THEN5 3 > IF "Bigger" . THEN \OUTPUT: "Bigger" 3 5 > IF "Bigger" ELSE "Lesser" THEN . \OUTPUT: "Lesser"
BEGIN ... <cond> UNTIL( Counts 0 to 4 ) 0 BEGIN DUP . 1 + DUP 5 = UNTIL \OUTPUT: 0 1 2 3 4