/*-*-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)],