Forth common practice
The Forth language has a standardized vocabulary, but many words have become common practice since that 1994 standard.
1 cells constant cell -1 cells constant -cell : cell- -cell + ;
: -rot ( a b c -- c a b ) rot rot ;
: bounds ( addr len -- limit addr ) over + swap ; \ convert string/array to DO-LOOP limits
DEFER-IS for late-bound, revectorable, and forward-referenced words:
: noop ( -- ) ; : defer create ( "name" -- ) ['] noop , does> ( -- ) @ execute ; : is ( xt "name" -- ) ' >body ! ; defer lessthan ' < is lessthan 2 3 lessthan . \ -1 (true)
Alternate local variable syntax using curly braces, designed to look like a regular stack comment:
: muldiv { a b -- a*b a/b } \ all stuff after "--" is ignored a b * a b / ;
Some counted string utilities:
: c+! ( n caddr -- ) dup >r c@ + r> c! ; : append ( src len dest -- ) 2dup 2>r count + swap move 2r> c+! ; : place ( src len dest -- ) 2dup 2>r 1+ swap move 2r> c! ; : scan ( str len char -- str' len' ) >r begin dup while over c@ r@ <> while 1 /string repeat then r> drop ; : skip ( str len char -- str' len' ) >r begin dup while over c@ r@ = while 1 /string repeat then r> drop ; : split ( str len char -- str1 len1 str2 len2 ) >r 2dup r> scan 2swap 2 pick - ;