This is to situate (create a context for) code so that it has access to its “own zone information” and access to a message delivered from the corresponding context of another zone. The print_int below is in such a context. The code in that context relays a message to the next zone and decrements a counter in the message.
let nz j = let neigh = Array.make j (fun m -> 42) in 
   (fun j ne -> neigh.(j) <- ne),
   (fun k izm -> print_string "thru zone "; print_int izm; print_int k;
      print_newline (); if izm = 0 then 44 else neigh.(1) (izm-1));;
nz : int -> (int -> (int -> int) -> unit) * (int -> int -> int)

let z0 = nz 2 and z1 = nz 2 and z2 = nz 2;;
z0 : (int -> (int -> int) -> unit) * (int -> int -> int)

let intro za zb = match za, zb with ((intNba, iZCa), (intNbb, iZCb))
           -> intNba 0 (iZCb 0); intNbb 1 (iZCa 1);;
intro :
  (int -> 'a -> 'b) * (int -> 'c) -> (int -> 'c -> 'd) * (int -> 'a) -> 'd

intro z2 z0; intro z0 z1; intro z1 z2;;

match z0 with (_, iz) -> iz 9 7;;
thru zone 79
thru zone 61
thru zone 51
thru zone 41
thru zone 31
thru zone 21
thru zone 11
thru zone 01
- : int = 44