[swift-evolution] Making capturing semantics of local

Mike Kluev mike.kluev at gmail.com
Sun Oct 29 10:01:41 CDT 2017


On 29 October 2017 at 14:02, Johannes Weiß <johannesweiss at 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)
}

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
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.swift.org/pipermail/swift-evolution/attachments/20171029/ecb13aaf/attachment.html>


More information about the swift-evolution mailing list