/* -*-Macsyma-*- */ EVAL_WHEN(BATCH,TTYOFF:TRUE)$ /*ASB;RNCOMB 2 12:32pm Friday, 14 January 1983 Created. 12:00pm Saturday, 15 January 1983 At JPG's suggestion, removed dependence on GENUT by bringing in copies of PREDPARTITION and RLOIEWL. 10:02am Sunday, 16 January 1983 LCM name changed to LCM_L to avoid name conflict with LCM in SHARE;FUNCTS > */ EVAL_WHEN(TRANSLATE, TRANSCOMPILE:TRUE, DEFINE_VARIABLE:'MODE)$ PUT('RNCOMB,2,'VERSION)$ RNCOMBINE(EXP):=BLOCK( [PARTSWITCH:TRUE,INFLAG:TRUE,PIECE,PFEFORMAT:TRUE], EXP:RLOIEWL("+",COMBINE(EXP)), PFEFORMAT:FALSE, RNCOMBINE1(EXP))$ LCM_L(LIST):= IF LIST=[] THEN 1 ELSE BLOCK([RLIST:REST(LIST),FLIST:FIRST(LIST),FRLIST, PARTSWITCH:TRUE,INFLAG:TRUE,PIECE], IF RLIST=[] THEN FLIST ELSE LCM_L(CONS(FLIST*(FRLIST:FIRST(RLIST))/GCD(FLIST,FRLIST), REST(RLIST))))$ RNCOMBINE1(LIST):=BLOCK( [FLIST,SPLITDUM,LSPLITDUM,FLIST_DENOM], IF LIST=[] THEN RETURN(0), FLIST:FIRST(LIST), IF LENGTH(LIST)=1 THEN RETURN(IF INPART(NUM(FLIST),0)="+" THEN RNCOMBINE1(ARGS(NUM(FLIST)))/DENOM(FLIST) ELSE FLIST), FLIST_DENOM:(FLIST_DENOM:DENOM(FLIST))/NUMFACTOR(FLIST_DENOM), FLIST:FLIST*FLIST_DENOM, SPLITDUM:PREDPARTITION(REST(LIST), LAMBDA([DUM],NUMBERP(DENOM(DUM)/FLIST_DENOM))), IF (LSPLITDUM:LAST(SPLITDUM))#[] THEN FLIST:DENOMTHRU(CONS(FLIST,LSPLITDUM*FLIST_DENOM))/FLIST_DENOM, FLIST+RNCOMBINE1(FIRST(SPLITDUM)))$ DENOMTHRU(EXP):=BLOCK( [LCMDUM:LCM_L(MAPLIST('DENOM,EXP))], APPLY("+",LCMDUM*EXP)/LCMDUM)$ /* Functions from DGVAL;GENUT FASL: */ RLOIEWL(OP,EXP):=BLOCK( [PARTSWITCH:TRUE,INFLAG:TRUE,PIECE], IF INPART(EXP,0)=OP THEN ARGS(EXP) ELSE [EXP])$ PREDPARTITION(LIST,PREDICATE):=BLOCK( [NOLIST:[],YESLIST:[]], FOR IDUM IN REVERSE(LIST) DO IF MODE_IDENTITY(BOOLEAN,APPLY(PREDICATE,[IDUM])) THEN YESLIST:CONS(IDUM,YESLIST) ELSE NOLIST:CONS(IDUM,NOLIST), [NOLIST,YESLIST])$ EVAL_WHEN(BATCH,TTYOFF:FALSE)$