/*-*-macsyma-*-*/

/* A macro for defining simple substitution macros.
   George Carrette, 12:20am  Tuesday, 12 August 1980 */

EVAL_WHEN(TRANSLATE,MODEDECLARE(FUNCTION(GETCHARN),FIXNUM))$

GENSYM_CONVENTIONP(SYMBOL):=
 IF GETCHARN(SYMBOL,1)=GETCHARN('%,1) AND
    GETCHARN(SYMBOL,2)=GETCHARN('%,1) THEN TRUE ELSE FALSE$

GENSYM_CONVENTIONS(EXP):=
 IF ATOM(EXP) THEN EXP ELSE FALSE
 BLOCK([GENS:[],TEMP:GENSYM_CONVENTIONS(PART(EXP,0))],
       IF NOT TEMP=FALSE THEN GENS:CONS(TEMP,GENS),
       EXP:ARGS(EXP),
       WHILE NOT EXP=[] DO (TEMP:GENSYM_CONVENTIONS(FIRST(EXP)),
                            IF NOT TEMP=FALSE THEN GENS:CONS(TEMP,GENS),
			    EXP:REST(EXP)),
       IF GENS=[] THEN FALSE ELSE GENS)$

INFX("=>")$

"=>"(HEADER,BODY)::=
 (IF ATOM(HEADER) THEN ERROR("bad arg to \"=>\"")
  MAPLIST(LAMBDA([U],IF NOT ATOM(U)
                       THEN ERROR(U,"Bad variable in arglist of \"=>\"")),
	  ARGS(HEADER)), 
  BLOCK([GENS:GENSYM_CONVENTIONS(BODY)],
        
