{ stknew()     : [0,[]];

  stkpsh(el,st): {

    st[1]:= st[1]+1;

    st[2]:=[el,st[2]] };

  stkpop(st)   :

    if(st[1]=0,

      error("pop from empty stack"),

      { st[1]:= st[1]-1;

        tmp:st[2];

        res:tmp[1];

        st[2]:=tmp[2];

        res});

  stktop(st)   :

    if(st[1]=0,

      error("top from empty stack"),

      { tmp:st[2];tmp[1]});

  stkemp(st)  : st[1]=0

}