/= { set } def /+ { add } def /- { sub } def /* { mul } def /<< { } def />> { } def /toArray { %% f1 ... fn n toArray [f1 ... fn] [ 2 1 roll %% f1 ... fn [ n 1 add 1 roll %% [ f1 ... fn ] } def /rotate_n { -1 roll } def /decompose { aload length } def /n 0 def /com 0 def /i 0 def /ar 0 def /res 0 def /ring_of_difference_operator { %% ${x,y}$ ring_of_difference_operator /arg1 = /vars arg1 def ${}$ % first arg vars to_records /@e.n = $ee$ @e.n 1 + toArray /vars = % vars = [$x$ $y$ $ee$] @e.n 1 + /@e.n = % @e.n = 3 ${$ vars {$,$ 2 cat_n} map % [$x,$ $y,$ $ee,$] decompose pop % $x,$ $y,$ $ee,$ vars {$E$ 2 rotate_n $,$ 3 cat_n} map decompose pop pop $eeE$ $}$ @e.n 2 * 2 + cat_n % the second arg ${}$ %% the third arg ${ee}$ $MED$ ${}$ } def