それ FORTRAN で

d.y.d - ※Multi Exit で、関数に複数の出口を与えられるものを募集していたのですが、FORTRAN の選択戻りみたいなものでしょうか。
選択戻りというのは、サブルーチンに文番号を渡すと、サブルーチンから戻った後処理を続ける場所をサブルーチン側で選べるという機能です。

      program AlternateReturn
      integer n
      n=10
 100  continue
C         呼び出すときは文番号に * をつけて渡す
          call ErrorAtZero(n,*200,*300)
          n=10
 200      continue
          n=n-1
      goto 100
 300  continue
      write(*,*) 'Error ', n, ' is zero'
      end

C     サブルーチンを定義するときは、文番号の仮引数の場所には * を書く
C     return n で n 番目の * に渡された文番号に戻る
      subroutine ErrorAtZero(n,*,*)
      integer n
      if (n.eq.0) return 2
      write(*,*) 'OK ',n,' is not zero'
      return 1
      end

実行結果

% g77 AlternateReturn.f
% ./a.out
 OK  10 is not zero
 OK  9 is not zero
 OK  8 is not zero
 OK  7 is not zero
 OK  6 is not zero
 OK  5 is not zero
 OK  4 is not zero
 OK  3 is not zero
 OK  2 is not zero
 OK  1 is not zero
 Error  0 is zero

ただし、Fortran 90 などでは廃止予定事項になっているみたいです。
あと、関数ではできないようなので少し悲しい。

余談

ENTRY 文というのがあって、それを使うとサブルーチンや関数の入り口を複数作ることができるそうな。

追記

それ例外でできるよ! - Notekinaba on Twitter: "@ytomino f(new MyException1 extends Exception<int>{...}, new MyException2 extends Exception<int>{...}, ...) 的にってことですかね。それでもまだfで再帰すると混ざるような気が" を見た。再帰……だと?……

  1. g77 で再帰はできない
  2. 再帰じゃなくてサブルーチン内で別のサブルーチンを呼ぶとしても、渡された引数をそのまま渡せない。100 return 1 みたいな行を書いて *100 を渡すとかしなければならない。