[BACK]Return to weight CVS log [TXT][DIR] Up to [local] / OpenXM_contrib2 / asir2000 / lib

Annotation of OpenXM_contrib2/asir2000/lib/weight, Revision 1.3

1.2       kimura      1: load("solve")$
1.3     ! kimura      2: load("gr")$
1.2       kimura      3: 
                      4: def nonposdegchk(Res){
                      5: 
                      6:        for(I=0;I<length(Res);I++)
                      7:                if(Res[I][1]<=0)
                      8:                        return 0$
                      9: 
                     10:        return 1$
                     11: }
                     12: 
                     13: def resvars(Res,Vars){
                     14: 
                     15:        ResVars=newvect(length(Vars),Vars)$
                     16: 
                     17:        for(I=0;I<length(Res);I++){
                     18:        
                     19:                for(J=0;J<size(ResVars)[0];J++)
                     20:                        if(Res[I][0]==ResVars[J])
                     21:                                break$
                     22: 
                     23:                ResVars[J]=Res[I][1]$
                     24:        }
                     25: 
                     26:        return(ResVars)$
                     27: }
                     28: 
1.3     ! kimura     29: def makeret1(Res,Vars){
1.2       kimura     30: 
                     31:        VarsNum=length(Vars)$
                     32: 
1.3     ! kimura     33:        ResVec=newvect(VarsNum,Vars)$
1.2       kimura     34: 
1.3     ! kimura     35:        for(I=0,M=0;I<length(Res);I++){
1.2       kimura     36: 
1.3     ! kimura     37:                for(J=0;J<VarsNum;J++)
        !            38:                        if(Res[I][0]==Vars[J])
1.2       kimura     39:                                break$
                     40: 
                     41:                if(J<VarsNum){
1.3     ! kimura     42:                        ResVec[J]=Res[I][1]$
1.2       kimura     43: 
1.3     ! kimura     44:                        if(type(ResVec[J])==1){
        !            45:                                if(M==0)
        !            46:                                        M=ResVec[J]$
        !            47:                                else
        !            48:                                        if(ResVec[J]<M)
        !            49:                                                M=ResVec[J]$
1.2       kimura     50:                        }
1.3     ! kimura     51:                }
        !            52: 
        !            53:        }
1.2       kimura     54: 
1.3     ! kimura     55:        for(F=0,I=0;I<VarsNum;I++)
        !            56:                if(type(ResVec[I])!=1){
        !            57:                        F=1$
        !            58:                        break$
1.2       kimura     59:                }
                     60: 
                     61:        if(F==0)
1.3     ! kimura     62:                for(I=0;I<VarsNum;I++)
        !            63:                        ResVec[I]=ResVec[I]/M*1.0$
1.2       kimura     64: 
                     65:        for(I=0;I<VarsNum;I++)
                     66:                for(J=0;J<length(Vars);J++)
1.3     ! kimura     67:                        ResVec[I]=subst(ResVec[I],Vars[J],
1.2       kimura     68:                                strtov(rtostr(Vars[J])+"_deg"))$
                     69: 
1.3     ! kimura     70:        ResVec=cons(F,vtol(ResVec))$
        !            71:        return ResVec$
        !            72: }
1.2       kimura     73: 
1.3     ! kimura     74: def junban1(A,B){
        !            75:        return (nmono(A)<nmono(B) ? -1:(nmono(A)>nmono(B) ? 1:0))$
1.2       kimura     76: }
                     77: 
1.3     ! kimura     78: def junban2(A,B){
1.2       kimura     79: 
                     80:        for(I=0;I<size(A)[0];I++){
                     81:                if(A[I]<B[I])
                     82:                        return 1$
                     83:                
                     84:                if(A[I]>B[I])
                     85:                        return -1$
                     86:        }
                     87: 
                     88:        return 0$
                     89: }
                     90: 
1.3     ! kimura     91: def roundret(V){
        !            92: 
        !            93:        VN=length(V)$
        !            94:        RET0=newvect(VN,V)$
        !            95: 
        !            96:        for(I=1;I<1000;I++){
        !            97:                RET1=I*RET0$
        !            98:                for(J=0;J<VN;J++){
        !            99:                        X=drint(RET1[J])$
        !           100:                        if(dabs(X-RET1[J])<0.2)
        !           101:                                RET1[J]=X$
        !           102:                        else
        !           103:                                break$
        !           104:                }
        !           105:                if(J==VN)
        !           106:                        break$
        !           107:        }
        !           108:        
        !           109:        if(I==1000)
        !           110:                return []$
        !           111:        else
        !           112:                return RET1$
        !           113: }
        !           114: 
        !           115: def chkou(L,ExpMat,CHAGORD){
        !           116: 
        !           117:        P=1$
        !           118:        F=ExpMat[L]$
        !           119: 
        !           120:        for(I=0;I<L;I++){
        !           121:                Q=ExpMat[L][CHAGORD[I]]$
        !           122:                for(J=0;J<size(ExpMat[0])[0];J++){
        !           123:                        ExpMat[L][CHAGORD[J]]=red((ExpMat[I][CHAGORD[I]]
        !           124:                                *ExpMat[L][CHAGORD[J]]-
        !           125:                                        Q*ExpMat[I][CHAGORD[J]])/P)$
        !           126:                }
        !           127: 
        !           128:                P=ExpMat[I][CHAGORD[I]]$
        !           129:        }
        !           130: 
        !           131:        for(J=0;J<size(ExpMat[0])[0];J++)
        !           132:                if(ExpMat[L][CHAGORD[J]]!=0)
        !           133:                        break$
        !           134: 
        !           135:        if(J==size(ExpMat[0])[0])
        !           136:                return L$
        !           137:        else{
        !           138:                TMP=CHAGORD[L]$
        !           139:                CHAGORD[L]=CHAGORD[J]$
        !           140:                CHAGORD[J]=TMP$
        !           141:                return (L+1)$
        !           142:        }
        !           143: }
        !           144: 
        !           145: def qcheck0(PolyList,Vars){
        !           146: 
        !           147:        RET=[]$
        !           148:        PolyListNum=length(PolyList)$
        !           149:        VarsNum=length(Vars)$
        !           150: 
        !           151:        ExpMat=newvect(VarsNum)$
        !           152:        CHAGORD=newvect(VarsNum)$
        !           153:        for(I=0;I<VarsNum;I++)
        !           154:                CHAGORD[I]=I$
        !           155: 
        !           156:        L=0$
        !           157:        for(I=0;I<PolyListNum;I++){
        !           158:                Poly=dp_ptod(PolyList[I],Vars)$
        !           159:                BASE0=dp_etov(dp_ht(Poly))$
        !           160:                Poly=dp_rest(Poly)$
        !           161:                for(;Poly!=0;Poly=dp_rest(Poly)){
        !           162:                        ExpMat[L]=dp_etov(dp_ht(Poly))-BASE0$
        !           163:                        L=chkou(L,ExpMat,CHAGORD)$
        !           164:                        if(L==VarsNum-1){
        !           165:                                RET=cons(ExpMat,RET)$
        !           166:                                RET=cons(CHAGORD,RET)$
        !           167:                                RET=cons(L,RET)$
        !           168:                                return RET$
        !           169:                        }
        !           170:                }       
        !           171:        }
        !           172:        
        !           173:        RET=cons(ExpMat,RET)$
        !           174:        RET=cons(CHAGORD,RET)$
        !           175:        RET=cons(L,RET)$
        !           176:        return RET$
        !           177: }
        !           178: 
        !           179: def inner(A,B){
        !           180: 
        !           181:        SUM=0$
        !           182:        for(I=0;I<size(A)[0];I++)
        !           183:                SUM+=A[I]*B[I]$
        !           184: 
        !           185:        return SUM$
        !           186: }
        !           187: 
        !           188: def checktd(PolyList,Vars,ResVars){
        !           189: 
        !           190:        PolyListNum=length(PolyList)$
        !           191:        VarsNum=length(Vars)$
        !           192: 
        !           193:        L=0$
        !           194:        for(I=0;I<PolyListNum;I++){
        !           195:                Poly=dp_ptod(PolyList[I],Vars)$
        !           196:                J0=inner(dp_etov(dp_ht(Poly)),ResVars)$
        !           197:                Poly=dp_rest(Poly)$
        !           198:                for(;Poly!=0;Poly=dp_rest(Poly))
        !           199:                        if(J0!=inner(dp_etov(dp_ht(Poly)),ResVars))
        !           200:                                return 0$
        !           201:        }
        !           202:        
        !           203:        return 1$
        !           204: }
        !           205: 
        !           206: def getgcd(A,B){
        !           207: 
        !           208:        VarsNumA=length(A)$
        !           209:        VarsNumB=length(B)$
        !           210: 
        !           211:        C=newvect(VarsNumB,B)$
        !           212: 
        !           213:        for(I=0;I<VarsNumA;I++){
        !           214: 
        !           215:                for(J=0;J<VarsNumB;J++)
        !           216:                        if(C[J]==A[I][0])
        !           217:                                break$
        !           218: 
        !           219:                C[J]=A[I][1]$
        !           220:        }
        !           221: 
        !           222:        D=0$
        !           223:        for(I=0;I<VarsNumB;I++)
        !           224:                D=gcd(D,C[I])$
        !           225: 
        !           226:        if(D!=0){
        !           227: 
        !           228:                for(I=0;I<VarsNumB;I++)
        !           229:                        C[I]=red(C[I]/D)$
        !           230: 
        !           231:        }
        !           232: 
        !           233:        for(L=1,D=0,I=0;I<VarsNumB;I++){
        !           234: 
        !           235:                if(type(C[I])==1){
        !           236:                        L=ilcm(L,dn(C[I]))$
        !           237:                        D=igcd(D,nm(C[I]))$
        !           238:                }
        !           239:                else
        !           240:                        break$
        !           241: 
        !           242:        }
        !           243: 
        !           244:        if(I==VarsNumB)
        !           245:                for(I=0;I<VarsNumB;I++)
        !           246:                        C[I]=C[I]*L/D$
        !           247: 
        !           248:        RET=newvect(VarsNumB)$
        !           249:        for(I=0;I<VarsNumB;I++){
        !           250:                RET[I]=newvect(2)$
        !           251:                RET[I][0]=B[I]$
        !           252:                RET[I][1]=C[I]$
        !           253:        }
        !           254: 
        !           255:        return vtol(map(vtol,RET))$
        !           256: }
        !           257: 
        !           258: def qcheck(PolyList,Vars){
        !           259: 
        !           260:        RET=[]$
        !           261:        Res=qcheck0(PolyList,Vars)$
        !           262:        VarsNum=length(Vars)$
        !           263: 
        !           264:        IndNum=Res[0]$
        !           265:        CHAGORD=Res[1]$
        !           266:        ExpMat=Res[2]$
        !           267: 
        !           268:        SolveList=[]$
        !           269:        for(I=0;I<IndNum;I++){
        !           270:                TMP=0$
        !           271:                for(J=0;J<VarsNum;J++)
        !           272:                        TMP+=ExpMat[I][CHAGORD[J]]*Vars[CHAGORD[J]]$
        !           273: 
        !           274:                SolveList=cons(TMP,SolveList)$
        !           275:        }
        !           276: 
        !           277:        VarsList=[]$
        !           278:        for(I=0;I<VarsNum;I++)
        !           279:                VarsList=cons(Vars[CHAGORD[I]],VarsList)$
        !           280: 
        !           281:        Rea=vars(SolveList)$
        !           282:        Res=solve(reverse(SolveList),reverse(VarsList))$
        !           283: 
        !           284:        if(nonposdegchk(Res)){
        !           285: 
        !           286:                Res=getgcd(Res,Rea)$
        !           287:        ResVars=resvars(Res,Vars)$
        !           288: 
        !           289:                if(checktd(PolyList,Vars,ResVars)==1){
        !           290: 
        !           291:                        for(J=0;J<length(Vars);J++)
        !           292:                                ResVars=map(subst,ResVars,Vars[J],
        !           293:                                        strtov(rtostr(Vars[J])+"_deg"))$
        !           294: 
        !           295:                        RET=cons([vtol(ResVars),ResVars,[]],RET)$
        !           296:                        return cons(1,RET)$
        !           297:                }
        !           298:                else
        !           299:                        return cons(0,RET)$
        !           300:        }
        !           301:        else
        !           302:                return cons(0,RET)$
        !           303: 
        !           304: }
        !           305: 
1.2       kimura    306: def weight(PolyList,Vars){
                    307: 
1.3     ! kimura    308:        Vars0=vars(PolyList)$
        !           309:        Vars1=[]$
        !           310:        for(I=0;I<length(Vars);I++)
        !           311:                if(member(Vars[I],Vars0))
        !           312:                        Vars1=cons(Vars[I],Vars1)$
        !           313: 
        !           314:        Vars=reverse(Vars1)$
        !           315: 
        !           316:        RET=[]$
        !           317: 
        !           318:        TMP=qcheck(PolyList,Vars)$
        !           319: 
        !           320:        if(car(TMP)==1){
        !           321:                RET=cdr(TMP)$
        !           322:                RET=cons(Vars,RET)$
        !           323:                RET=cons(1,RET)$
        !           324:                return RET$     
        !           325:        }
        !           326: 
1.2       kimura    327:        dp_ord(2)$
                    328: 
                    329:        PolyListNum=length(PolyList)$
1.3     ! kimura    330:        VPolyList=qsort(newvect(PolyListNum,PolyList),junban1)$
        !           331:        VPolyList=vtol(VPolyList)$
1.2       kimura    332: 
                    333:        ExpMat=[]$
                    334:        for(I=0;I<PolyListNum;I++)
1.3     ! kimura    335:                for(Poly=dp_ptod(VPolyList[I],Vars);Poly!=0;Poly=dp_rest(Poly))
1.2       kimura    336:                        ExpMat=cons(dp_etov(dp_ht(Poly)),ExpMat)$
                    337: 
                    338:        ExpMat=reverse(ExpMat)$
                    339:        ExpMat=newvect(length(ExpMat),ExpMat)$
                    340: 
1.3     ! kimura    341: 
        !           342: /* first */
        !           343: 
1.2       kimura    344:        ExpMatRowNum=size(ExpMat)[0]$
                    345:        ExpMatColNum=size(ExpMat[0])[0]$
                    346:        ExtMatColNum=ExpMatColNum+PolyListNum$
                    347: 
                    348:        OneMat=newvect(PolyListNum+1,[0])$
1.3     ! kimura    349:        for(I=0,SUM=0;I<PolyListNum;I++){
        !           350:                SUM+=nmono(VPolyList[I])$
1.2       kimura    351:                OneMat[I+1]=SUM$
                    352:        }
                    353: 
                    354:        RevOneMat=newvect(ExpMatRowNum)$
                    355:        for(I=0;I<PolyListNum;I++)
                    356:                for(J=OneMat[I];J<OneMat[I+1];J++)
                    357:                        RevOneMat[J]=I$
                    358: 
                    359:        NormMat=newmat(ExpMatColNum,ExtMatColNum)$
                    360: 
                    361:        for(I=0;I<ExpMatColNum;I++)
                    362:                for(J=0;J<ExpMatColNum;J++)
                    363:                        for(K=0;K<ExpMatRowNum;K++)
                    364:                                NormMat[I][J]+=ExpMat[K][I]*ExpMat[K][J]$
                    365: 
                    366:        for(I=0;I<ExpMatColNum;I++)
                    367:                for(J=0;J<PolyListNum-1;J++)
                    368:                        for(K=OneMat[J];K<OneMat[J+1];K++)
                    369:                                NormMat[I][J+ExpMatColNum]-=ExpMat[K][I]$
                    370: 
                    371:        for(I=0;I<ExpMatColNum;I++)
                    372:                for(J=OneMat[PolyListNum-1];J<OneMat[PolyListNum];J++)
                    373:                        NormMat[I][ExtMatColNum-1]+=ExpMat[J][I]$
                    374: 
                    375:        NormMat2=newmat(PolyListNum-1,ExpMatColNum+1)$
                    376: 
                    377:        for(I=0;I<PolyListNum-1;I++)
                    378:                for(J=0;J<ExpMatColNum;J++)
                    379:                        for(K=OneMat[I];K<OneMat[I+1];K++)
                    380:                                NormMat2[I][J]-=ExpMat[K][J]$
                    381: 
                    382:        for(I=0;I<PolyListNum-1;I++)
                    383:                NormMat2[I][ExpMatColNum]=OneMat[I+1]-OneMat[I]$
                    384: 
                    385:        ExtVars=Vars$
                    386:        for(I=0;I<PolyListNum-1;I++)
                    387:                ExtVars=append(ExtVars,[uc()])$
                    388: 
                    389:        SolveList=[]$
                    390:        for(I=0;I<ExpMatColNum;I++){
                    391:                TMP=0$
                    392:                for(J=0;J<ExtMatColNum-1;J++)
                    393:                        TMP+=NormMat[I][J]*ExtVars[J]$
                    394: 
                    395:                TMP-=NormMat[I][ExtMatColNum-1]$
                    396:                SolveList=cons(TMP,SolveList)$
                    397:        }
                    398: 
                    399:        for(I=0;I<PolyListNum-1;I++){
                    400:                TMP=0$
                    401:                for(J=0;J<ExpMatColNum;J++)
                    402:                        TMP+=NormMat2[I][J]*ExtVars[J]$
                    403: 
                    404:                TMP+=NormMat2[I][ExpMatColNum]*ExtVars[I+ExpMatColNum]$
                    405: 
                    406:                SolveList=cons(TMP,SolveList)$
                    407:        }
                    408: 
1.3     ! kimura    409:        Rea=vars(SolveList)$
1.2       kimura    410:        Res=solve(SolveList,reverse(ExtVars))$
                    411: 
                    412:        if(nonposdegchk(Res)){
1.3     ! kimura    413:                Res=getgcd(Res,Rea)$
        !           414:                TMP1=makeret1(Res,Vars);
        !           415:                if(car(TMP1)==0){       
        !           416:                        TMP2=roundret(cdr(TMP1));
        !           417:                        TMP3=map(drint,cdr(TMP1))$
        !           418:                        RET=cons([cdr(TMP1),newvect(length(TMP3),TMP3),TMP2],RET)$
        !           419:                }
        !           420:                else
        !           421:                        RET=cons([cdr(TMP1),[],[]],RET)$
        !           422:        }
        !           423: 
        !           424: /* second */
        !           425: 
        !           426:        NormMat=newmat(ExpMatColNum,ExpMatColNum+1)$
        !           427: 
        !           428:        for(I=0;I<ExpMatColNum;I++)
        !           429:                for(J=0;J<ExpMatColNum;J++)
        !           430:                        for(K=0;K<ExpMatRowNum;K++)
        !           431:                                NormMat[I][J]+=ExpMat[K][I]*ExpMat[K][J]$
1.2       kimura    432: 
1.3     ! kimura    433:        for(I=0;I<ExpMatColNum;I++)
        !           434:                for(J=0;J<ExpMatRowNum;J++)
        !           435:                        NormMat[I][ExpMatColNum]+=ExpMat[J][I]$
1.2       kimura    436: 
1.3     ! kimura    437:        SolveList=[]$
        !           438:        for(I=0;I<ExpMatColNum;I++){
        !           439:                TMP=0$
        !           440:                for(J=0;J<ExpMatColNum;J++)
        !           441:                        TMP+=NormMat[I][J]*Vars[J]$
1.2       kimura    442: 
1.3     ! kimura    443:                TMP-=NormMat[I][ExpMatColNum]$
        !           444:                SolveList=cons(TMP,SolveList)$
        !           445:        }
1.2       kimura    446: 
1.3     ! kimura    447:        Rea=vars(SolveList)$
        !           448:        Res=solve(SolveList,Vars)$
1.2       kimura    449: 
1.3     ! kimura    450:        if(nonposdegchk(Res)){
        !           451:                Res=getgcd(Res,Rea)$
        !           452:                TMP1=makeret1(Res,Vars);
        !           453:                if(car(TMP1)==0){       
        !           454:                        TMP2=roundret(cdr(TMP1));
        !           455:                        TMP3=map(drint,cdr(TMP1))$
        !           456:                        RET=cons([cdr(TMP1),newvect(length(TMP3),TMP3),TMP2],RET)$
1.2       kimura    457:                }
                    458:                else
1.3     ! kimura    459:                        RET=cons([cdr(TMP1),[],[]],RET)$
1.2       kimura    460:        }
                    461: 
1.3     ! kimura    462: /* third */
        !           463: 
        !           464:        ExpMat=qsort(ExpMat,junban2)$
1.2       kimura    465:        ExpMat2=[]$
                    466:        for(I=0;I<size(ExpMat)[0];I++)
                    467:                if(car(ExpMat2)!=ExpMat[I])
                    468:                        ExpMat2=cons(ExpMat[I],ExpMat2)$
                    469: 
                    470:        ExpMat=newvect(length(ExpMat2),ExpMat2)$
                    471:        ExpMatRowNum=size(ExpMat)[0]$
                    472:        ExpMatColNum=size(ExpMat[0])[0]$
                    473: 
                    474:        NormMat=newmat(ExpMatColNum,ExpMatColNum+1)$
                    475: 
                    476:        for(I=0;I<ExpMatColNum;I++)
                    477:                for(J=0;J<ExpMatColNum;J++)
                    478:                        for(K=0;K<ExpMatRowNum;K++)
                    479:                                NormMat[I][J]+=ExpMat[K][I]*ExpMat[K][J]$
                    480: 
                    481:        for(I=0;I<ExpMatColNum;I++)
                    482:                for(J=0;J<ExpMatRowNum;J++)
                    483:                        NormMat[I][ExpMatColNum]+=ExpMat[J][I]$
                    484: 
                    485:        SolveList=[]$
                    486:        for(I=0;I<ExpMatColNum;I++){
                    487:                TMP=0$
                    488:                for(J=0;J<ExpMatColNum;J++)
                    489:                        TMP+=NormMat[I][J]*Vars[J]$
                    490: 
                    491:                TMP-=NormMat[I][ExpMatColNum]$
                    492:                SolveList=cons(TMP,SolveList)$
                    493:        }
                    494: 
1.3     ! kimura    495:        Rea=vars(SolveList)$
1.2       kimura    496:        Res=solve(SolveList,Vars)$
                    497: 
1.3     ! kimura    498:        if(nonposdegchk(Res)){
        !           499:                Res=getgcd(Res,Rea)$
        !           500:                TMP1=makeret1(Res,Vars);
        !           501:                if(car(TMP1)==0){       
        !           502:                        TMP2=roundret(cdr(TMP1));
        !           503:                        TMP3=map(drint,cdr(TMP1))$
        !           504:                        RET=cons([cdr(TMP1),newvect(length(TMP3),TMP3),TMP2],RET)$
        !           505:                }
        !           506:                else
        !           507:                        RET=cons([cdr(TMP1),[],[]],RET)$
        !           508:        }
        !           509: 
        !           510:        RET=cons(Vars,reverse(RET))$
        !           511:        RET=cons(0,RET)$
        !           512:        return RET$
        !           513: }
        !           514: 
        !           515: def average(PolyList,Vars){
        !           516: 
        !           517:        RET=[]$
        !           518:        dp_ord(2)$
        !           519: 
        !           520:        PolyListNum=length(PolyList)$
        !           521: 
        !           522:        ExpMat=[]$
        !           523:        for(I=0;I<PolyListNum;I++)
        !           524:                for(Poly=dp_ptod(PolyList[I],Vars);Poly!=0;Poly=dp_rest(Poly))
        !           525:                        ExpMat=cons(dp_etov(dp_ht(Poly)),ExpMat)$
        !           526: 
        !           527:        ExpMat=reverse(ExpMat)$
        !           528:        ExpMat=newvect(length(ExpMat),ExpMat)$
        !           529: 
        !           530:        ExpMat=qsort(ExpMat,junban2)$
        !           531:        ExpMat2=[]$
        !           532:        for(I=0;I<size(ExpMat)[0];I++)
        !           533:                if(car(ExpMat2)!=ExpMat[I])
        !           534:                        ExpMat2=cons(ExpMat[I],ExpMat2)$
        !           535: 
        !           536:        ExpMat=newvect(length(ExpMat2),ExpMat2)$
        !           537:        ExpMatRowNum=size(ExpMat)[0]$
        !           538:        ExpMatColNum=size(ExpMat[0])[0]$
        !           539: 
        !           540:        Res=newvect(ExpMatColNum);
        !           541:        for(I=0;I<ExpMatColNum;I++)
        !           542:                Res[I]=newvect(2,[Vars[I]])$
        !           543: 
        !           544:        for(I=0;I<ExpMatRowNum;I++)
        !           545:                for(J=0;J<ExpMatColNum;J++)
        !           546:                        Res[J][1]+=ExpMat[I][J]$
        !           547: 
        !           548:        for(I=0;I<ExpMatColNum;I++)
        !           549:                if(Res[I][1]==0)
        !           550:                        Res[I][1]=1$
        !           551:                else
        !           552:                        Res[I][1]=1/Res[I][1]$
        !           553: 
        !           554:        RET=cons(makeret(vtol(Res),Vars,1),RET)$
        !           555:        RET=cons(Vars,RET)$
1.2       kimura    556: 
1.3     ! kimura    557:        return RET$
1.2       kimura    558: }
                    559: 
                    560: end$

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>