/= { 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