link options
link vpred

procedure main(args)
   local n, i,  first, last, candidate, opts, delta, delta_alt

   opts := options(args, "n+i+")

   n := \opts["n"] | 6
   i := \opts["i"] | 2

   if n < 4 then stop("*** invalid digit specification")
   if not (1 <= i <= 9) then
      stop("*** invalid initial digit specification")

   first := i * 10 ^ (n - 1) + i

   last := (i + 1) * 10 ^ (n - 1)	# past, need to reduce

   if i = 1 then last -:= 2
   else if n % 2 = 0 then last -:= 10 - i
   else last -:= 21 - i

   delta := 9
   delta_alt := 1	# will actually start here

   if n % 2 = 0 then {
      delta := 11 * delta
      delta_alt := 11 * delta_alt
      }

   candidate := first

   repeat {
     if vpred(candidate) then write(candidate)
     candidate +:= delta
     if candidate > last then exit()
     delta :=: delta_alt
     }

end