/* -*- MACSYMA -*- */ EVAL_WHEN(BATCH,TTYOFF:TRUE)$ /*ASB;LRATS 3 5:05pm Tuesday, 14 July 1981 7:53pm Saturday, 29 May 1982 Added a DIAGEVAL_VERSION for this file. 1:43pm Saturday, 12 June 1982 Changed loadflags to getversions, DEFINE_VARIABLE:'MODE. */ EVAL_WHEN(TRANSLATE, DEFINE_VARIABLE:'MODE, TRANSCOMPILE:TRUE)$ PUT('LRATS,3,'DIAGEVAL_VERSION)$ DEFINE_VARIABLE(MESSLRATS2,"Invalid argument to FULLRATSUBST:",ANY)$ DEFINE_VARIABLE(FULLRATSUBSTFLAG,FALSE,BOOLEAN)$ LRATSUBST(LISTOFEQNS,EXP):=BLOCK( [PARTSWITCH:TRUE,INFLAG:TRUE,PIECE], IF NOT LISTP(LISTOFEQNS) THEN IF INPART(LISTOFEQNS,0)="=" THEN LISTOFEQNS:[LISTOFEQNS] ELSE IF FULLRATSUBSTFLAG=TRUE THEN ERROR(MESSLRATS2,[LISTOFEQNS,EXP]) ELSE ERROR("Invalid argument to LRATSUBST:",[LISTOFEQNS,EXP]), FOR IDUM IN LISTOFEQNS DO IF INPART(IDUM,0)#"=" THEN IF FULLRATSUBSTFLAG=TRUE THEN ERROR(MESSLRATS2,[LISTOFEQNS,EXP]) ELSE ERROR("Invalid argument to LRATSUBST:",[LISTOFEQNS,EXP]), LRATSUBST1(LISTOFEQNS,EXP))$ LRATSUBST1(LISTOFEQNS,EXP):=BLOCK( [DUM:IF LISTOFEQNS=[] THEN EXP ELSE IF REST(LISTOFEQNS)=[] THEN RATSUBST(INPART(LISTOFEQNS,1,2),INPART(LISTOFEQNS,1,1),EXP) ELSE LRATSUBST1(REST(LISTOFEQNS), IF FULLRATSUBSTFLAG=TRUE THEN FULLRATSUBST1(INPART(LISTOFEQNS,1,2), INPART(LISTOFEQNS,1,1), EXP) ELSE RATSUBST(INPART(LISTOFEQNS,1,2), INPART(LISTOFEQNS,1,1), EXP))], DECLARE(DUM,SPECIAL), IF FULLRATSUBSTFLAG=TRUE AND DUM#EXP THEN LRATSUBST1(LISTOFEQNS,DUM) ELSE IF DUM#EXP THEN DUM ELSE EXP)$ FULLRATSUBST1(SUBSTEXP,FOREXP,EXP):=BLOCK( [DUM:RATSUBST(SUBSTEXP,FOREXP,EXP)], IF DUM=EXP THEN EXP ELSE FULLRATSUBST1(SUBSTEXP,FOREXP,DUM))$ FULLRATSUBST([ARGLIST]):=BLOCK( [FULLRATSUBSTFLAG:TRUE,LARGLISTDUM:LENGTH(ARGLIST),FARGLIST, PARTSWITCH:TRUE,INFLAG:TRUE,PIECE], IF LARGLISTDUM=2 THEN IF LISTP(FARGLIST:FIRST(ARGLIST)) OR INPART(FARGLIST,0)="=" THEN LRATSUBST(FARGLIST,LAST(ARGLIST)) ELSE ERROR(MESSLRATS2,ARGLIST) ELSE IF LARGLISTDUM=3 THEN APPLY('FULLRATSUBST1,ARGLIST) ELSE ERROR(MESSLRATS2,ARGLIST))$ EVAL_WHEN(BATCH,TTYOFF:FALSE)$