procedure main(args) # Closure/Variable Capture every put(L := [], vcapture(1 to 10)) # build list of index closures write("Randomly selecting L[",i := ?*L,"] = ",L[i]()) # L[i]() calls the closure end # The anonymous 'function', as a co-expression. Most of the code is standard # boilerplate needed to use a co-expression as an anonymous function. procedure vcapture(x) # vcapture closes over its argument return makeProc { repeat { (x[1]^2) @ &source } } end procedure makeProc(A) # the makeProc PDCO from the UniLib Utils package return (@A[1], A[1]) end