Exceptions as Non-Local Returns

In a nested tree of records, find the first one that satisfies a given criterion P, or return unit if there is none
fun {Find R P}
   proc {FindRec R}
      if {P R} then raise found(R) end
      elseif {IsRecord R} then {Record.forAll R FindRec}
      else skip end
   end
in
   try {FindRec R} unit
   catch found(X) then X end
end