DESOLVE(EQNS,VARS):=BLOCK([TEQNS,TVARS,OVAR,LVAR,FLAG,DISPFLAG], MODEDECLARE(FLAG,BOOLEAN), FLAG:FALSE, IF NOT LISTP(VARS) THEN (EQNS:[EQNS], VARS:[VARS], FLAG:TRUE), IF LENGTH(OVAR:VARS[1])#1 THEN ERROR(OVAR,"contains more than one independent variable."), OVAR:INPART(OVAR,1),DISPFLAG:FALSE, TEQNS:MAP(LAMBDA([Z],LAPLACE(Z,OVAR,LVAR)),EQNS), TVARS:MAP(LAMBDA([Z],'LAPLACE(Z,OVAR,LVAR)),VARS), /* if not freeof(nounify('diff),teqns) then return(false), */ TEQNS:ERRCATCH(SOLVE(TEQNS,TVARS)), IF TEQNS=[] OR TEQNS=[[]] THEN ERROR("DESOLVE can't handle this case.") ELSE TEQNS:FIRST(TEQNS), if flag#true then teqns:first(teqns), TEQNS:MAP(LAMBDA([Z],ILT(Z,LVAR,OVAR)),TEQNS), IF FLAG AND LENGTH(TVARS)=1 THEN TEQNS[1] ELSE TEQNS)$