Lambda recursive ...

Maurice Naftalin maurice at morninglight.co.uk
Sat Oct 20 09:29:47 PDT 2012


The FAQ page with this factorial example
(http://lambdafaq.org/can-lambda-expressions-be-used-to-define-recursive-functions/)
actually did make that point. It makes it more emphatically now.

Maurice

On 19/10/2012 14:18, Aleksey Shipilev wrote:
> On 10/19/2012 05:09 PM, Boaz Nahum wrote:
>    
>> interface FactInt { int invoke(int i); }
>>
>>   FactInt factorial = i ->
>>                  { return i == 0 ? 1 : i * factorial.invoke(i - 1); };
>>
>> But the compile (b61) says:
>> error: variable factorial might not have been initialized
>>
>> How can I write recursive expression like this ?
>>      
> Lambda can not capture the uninitialized local variable; the trick is to
> use fields, in which case lambda will capture "this" or the reference to
> static field [1].
>
> -Aleksey.
>
> [1]
> https://github.com/shipilev/jdk8-lambda-samples/blob/master/src/test/java/net/openjdk/lambda/FibonacciTest.java
>
>
>    



More information about the lambda-dev mailing list