declare fun {NewQueue} X C={NewCell q(0 X X)} proc {Insert X} N S E1 in q(N S X|E1)=@C C:=q(N+1 S E1) end fun {Delete} N S1 E X in q(N X|S1 E)=@C C:=q(N-1 S1 E) X end in queue(insert:Insert delete:Delete) end