TTYOFF:TRUE$ declare(pfaffm,special)$ PFAFFIAN(INTEG,LIST):=BLOCK([SGN:-1,ANS:0,PDUM,LDUM], IF NOT (LISTP(LIST) AND INTEGERP(INTEG) AND INTEG>0 AND LENGTH(LIST)=INTEG*(INTEG+1)/2) THEN ERROR((ERREXP:[INTEG,LIST],"Invalid arg to PFAFFIAN.MERREXP holds the offending expression.")), IF INTEG =1 THEN RETURN(FIRST(LIST)), IF EVENP(INTEG) THEN RETURN(0), IF INTEG = 3 THEN RETURN(LIST[1]*LIST[6]-LIST[2]*LIST[5]+LIST[3]*LIST[4]) ELSE FOR KZERO THRU INTEG DO ANS:ANS+ INPART(LIST,KZERO)*(SGN:-SGN)* PFAFFIAN(INTEG-2, REST(INPART(LIST, APPLY('ALLBUT, IF LISTP(PDUM:PFAFFM[INTEG,KZERO]) THEN PDUM ELSE PFAFFM[INTEG,KZERO]:(LDUM:(KZERO+1)*(2*INTEG-KZERO)/2, PDUM:[], IF KZERO#1 THEN FOR MDUM:2 THRU KZERO DO PDUM:ENDCONS(KZERO+(MDUM-1)*(2*INTEG-MDUM)/2,PDUM), FOR MDUM:KZERO*(2*INTEG-KZERO+1)/2+1 THRU LDUM DO PDUM:ENDCONS(MDUM,PDUM), PDUM))),INTEG)), ANS)$ TTYOFF:FALSE$