// efg's REXX-like function FUNCTION Words(s: STRING): INTEGER; VAR i : INTEGER; state: 0..2; {state of finite state machine} w : INTEGER; BEGIN w := 0; state := 0; FOR i := 1 TO LENGTH(s) DO BEGIN CASE state OF 0: IF s[i] <> ' ' THEN state := 1; 1: IF s[i] = ' ' THEN BEGIN state := 2; INC (w) END; 2: IF s[i] <> ' ' THEN state := 1 END END; IF state = 1 THEN INC (w); RESULT := w END {Words};