> On 29 Oct 2017, at 3:01 pm, Mike Kluev <mike.kl...@gmail.com> wrote: > >> On 29 October 2017 at 14:02, Johannes Weiß <johanneswe...@apple.com> wrote: >> >> Definitely not arguing with that. But there are (valid?) cases when you want >> a recursive closure which doesn’t have a native recursion mechanism and then >> `fix` can be useful I’d argue. I think more straightforward than >> >>>>>> recursive.c = { x in >>>>>> (x == 0) ? 1 : x * recursive.c(x - 1) >>>>>> } >> > > you can do without "recursive.c": > > var factorial: ((Int) -> Int)! > > factorial = { n in > n == 0 ? 1 : n * factorial(n - 1) > }
That’s nicer, thanks! > > factorial(5) // 120 > > >> . But fortunately have local functions, I can only recall wanting a >> recursive closure once. >> > > in down to earth practical programming even if i didn't have local functions > i probably wouldn't bother abusing closures to implement recursion, would > just used what's available: methods. and if there is some extra state to pass > from the outer scopes, well, so be it, either via parameters of via some > instance variables, etc. wasn't too much of a problem in good old C/C++. in a > way, knowing exact state you want to pass and passing it explicitly organises > the code and the reasoning about it. > > Mike >
_______________________________________________ swift-evolution mailing list swift-evolution@swift.org https://lists.swift.org/mailman/listinfo/swift-evolution