[fpc-pascal] Functional Pascal

Lukasz Stafiniak lukstafi at gmail.com
Thu Mar 1 12:21:44 CET 2012


On Wed, Feb 29, 2012 at 11:31 AM, Sven Barth
<pascaldragon at googlemail.com> wrote:
> Am 28.02.2012 20:31, schrieb Lukasz Stafiniak:
>>
>> (1) A declaration part, that parallels "var", with keyword "val" or
>> "let" (since "val" is taken up by a procedure). It introduces named
>> values, i.e. non-assignable variables. The part after "=" can be any
>> expression. Therefore, this feature spoils the "declaration --
>> implementation divide" that is dear to Pascal.
>
>
> I personally don't see a use for this... but feel free to provide a useful
> example ;)

The main point is to perform some computation whose result is
subsequently captured when the nested function is defined (becomes
part of the closure).

>> (2) Closures. That is, making local functions that only use "const"
>> arguments and "val / let" variables safe to return from the outer
>> function. This can be done by allocating the "val / let" data on the
>> heap, or perhaps easier by copying them into an implicitly built
>> object and interpreting the returned local function as pointer to
>> method of this object. The closure-object would be memory-managed as
>> other objects.
>
>
> Closures are already supported by Delphi 2009 and are currently being worked
> on by someone in FPC.

Wow, I didn't know about that! Still, it is not clear to me it is a
good thing to capture "var" variables in the closure. It goes against
the semantics of normal nested functions. It's a "dirty but flexible"
solution -- it makes it easy to define several closures out of a
single definition (kind of like using partial application), e.g. when
the anonymous function is inside a loop. Java doesn't have it
(closures can only refer to "final" variables, "final"="val"="let").

Best,
Ɓukasz



More information about the fpc-pascal mailing list