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