重新丟擲錯誤

此程式碼段實現了一個過程,其行為類似於 postscript 迴圈運算子。如果使用者 proc 呼叫 exit,它會捕獲 invalidexit 錯誤以修復最後的 end 的 dictstack。通過呼叫 stop 重新丟擲除 invalidexit 之外的任何其他錯誤。

% array n proc  .  -
% Like `forall` but delivers length=n subsequences produced by getinterval
/fortuple { 4 dict begin
    0 {offset proc n arr} {exch def} forall
    /arr load length n idiv
    {
        {
            /arr load offset n getinterval
            [ /proc load currentdict end /begin cvx ] cvx exec
            /offset offset n add def
        } stopped {
            $error /errorname get /invalidexit eq
            { 1 dict begin exit }{ stop } ifelse
        } if
    } repeat
end
} def

%[ 0 1 10 {} for ] 3 {} fortuple pstack clear ()=