lisp procedure mkpartitions1(m,q,min,max,partitie,partitielist);
if q=1 then
  if m>=min then reverse(m . partitie) . partitielist
  else partitielist
else
  if min>max then partitielist
  else mkpartitions1(m-min,q-1,min,(m-min)/(q-1),min . partitie,
                    mkpartitions1(m,q,min+1,max,partitie,partitielist))$

lisp procedure partities1(m,q,min);
mkpartitions1(m,q,min,m/q,nil,nil)$

lisp procedure mkallpartitions1 m;
for i:=m step -1 until 1 conc partities1(m,i,1)$

lisp operator mkvarlist1;
lisp procedure mkvarlist1(m,q);
'list . processpartitie1list1(partities1(m,q,0),nil)$

lisp procedure processpartitie1list1(partitielist,varlist);
if null partitielist then varlist
else processpartitie1list1(cdr partitielist,
            processpartitie1(car partitielist,0,nil,nil . nil,varlist))$

lisp procedure processpartitie1(partitie,oldi,oldilist,var,varlist);
if null partitie then if null car var then ('times . cdr var) . varlist else
  ('times . ('ext . reverse ordn car var) . cdr var) . varlist
else if car partitie=0 then processpartitie1(cdr partitie,oldi,oldilist,var,varlist)
else if car partitie=oldi then
  processcarpartitie1(oldi,oldilist,cdr partitie,var,varlist)
else processcarpartitie1(car partitie,
                        cdr nth(cdadr get('graadlijst,'avalue),car partitie),
                        cdr partitie,var,varlist)$

lisp procedure processcarpartitie1(i,ilist,restpartitie,var,varlist);
if null ilist then varlist
else 
  processcarpartitie1(i,cdr ilist,restpartitie,var,
   processpartitie1(restpartitie,i,ilist,car var . car ilist . cdr var,varlist))$

end;