I'm trying to get my head around writing lambdas with closures in nim. Creating an "iota" function seems like a good start. Here's what I've got so far:
proc ioto(): proc() =
var i = 0
proc fn (): int =
i = i + 1
return i
result = fn
var j = iota()
echo j() , j()
var k = iota()
echo k(), k(), k()
echo j()
The first problem is I get a compiler error as a type mismatch in the declaration of iota. iota returns a proc that returns an int, but I haven't been able to figure out how to declare it as such.
The second thing is: is "i" global to all created functions, or local to each one? The latter is the desired behaviour.
Says: "Error: undeclared identifier: 'iota'" where j is defined.
I'm using nightly version 1.1.1. I also used a version 1.0.4, but that still didn't work.