> On Oct 26, 2017, at 10:27 PM, Howard Lovatt <[email protected]> wrote:
>
> > Closures cannot replace all uses of local functions. Local functions can be
> > recursive, and have a generic parameter list.
>
> My response would be add these featurtes to closures, it will make closures
> better.
Since closures are first class values, giving closures the ability to define
their own generic parameters means the type system would now need to support
higher-rank polymorphism. This is a complex feature...
>
> In terms of recursion you can fiddle it:
>
> struct RecursiveClosure<C> {
> var c: C! = nil
> }
> func factorial(_ n: Int) -> Int {
> var recursive = RecursiveClosure<(Int) -> Int>()
> recursive.c = { x in
> (x == 0) ? 1 : x * recursive.c(x - 1)
> }
> return recursive.c(n)
> }
> factorial(5) // 120
Sure, this is just the Scheme letrec-to-let transform done by hand. But at this
point, it’s clearly worse than defining a local function, even more so if you
have multiple mutually recursive local functions.
Slava
>
> -- Howard.
>
> On 27 October 2017 at 15:53, Slava Pestov <[email protected]
> <mailto:[email protected]>> wrote:
>
>
>> On Oct 26, 2017, at 9:52 PM, Howard Lovatt <[email protected]
>> <mailto:[email protected]>> wrote:
>>
>> It would be easy to provide a fixit.
>
> That is still a source breaking change that requires migration, though.
>
>> How often are they actually used? I rarely use them and all my use cases
>> could be a closure instead.
>>
>> Also see Mike Kluev example; local functions are arguably worse than
>> closures in all cases (provided that you can appropriately annotate the
>> function type).
>
> Closures cannot replace all uses of local functions. Local functions can be
> recursive, and have a generic parameter list.
>
> Slava
>
>>
>> -- Howard.
>>
>> On 27 October 2017 at 12:26, Slava Pestov <[email protected]
>> <mailto:[email protected]>> wrote:
>>
>>
>>> On Oct 26, 2017, at 4:45 PM, Howard Lovatt via swift-evolution
>>> <[email protected] <mailto:[email protected]>> wrote:
>>>
>>> Rather than expand local function syntax why not deprecate local functions
>>> completely
>>
>> I don’t think at this point such a drastic change to the language is likely
>> to happen.
>>
>> Slava
>>
>
>
_______________________________________________
swift-evolution mailing list
[email protected]
https://lists.swift.org/mailman/listinfo/swift-evolution