PARTSWITCH:TRUE$ PART2SUM(x):=BLOCK([rep:0,i],FOR i:2 STEP 1 UNLESS PART(x,i)=END DO rep:rep+PART(x,i),rep)$ /* Definition des noms de fonction */ Fonc : [f,g]$ /* Test si x est une fonction */ TESTFONC(x):=IF MEMBER(x,Fonc) THEN TRUE ELSE FALSE$ /* Teste si x est une somme */ TESTSUM(x):=IF ATOM(x) THEN FALSE ELSE IF PART(x,0)="+" THEN TRUE ELSE FALSE$ /* Declaration de modeles */ MATCHDECLARE(f,TESTFONC)$ MATCHDECLARE(A,TRUE)$ /* Declaration de la regle LIN */ MATCHDECLARE(B,TESTSUM)$ DEFRULE(LIN,f[A,B],f[A,PART(B,1)]+f[A,PART2SUM(B)])$ e(x,y):=f[x,y];