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