Practical uses for referencable anonymous functions:<br><br>(map f collection)<br><br>This is the prototypical way to run a function over each element in a collection, returning the results.<br><br>Example:<br><br>(map (lambda (x) (+ x 1)) '(1 2 3))<br>

<br>-> (2 3 4)<br><br>(sort compare collection)<br clear="all"><div><br>When dealing with complex data types, the user may want to implement a custom compare function.<br><br>(sort (lambda (x y) (- y:employee-id x:employeeid)) (list emp1 emp2 emp3))<br>

<br>-> (emp3 emp1 emp2)<br><br>(zip f collection1 collection2)<br><br>Similar to map, zip runs a 2-input function over the elements of the collections, returning the results.<br><br>(zip (lamba (x y) (+ x y)) '(1 2 3) '(4 5 6))<br>

<br>-> (5 7 9)<br><br>At first glance, each of these examples may seem pointless. Can't we implement the same behavior without referencing anonymous functions? Yes, we can, but only for a specific function. If you want your database library to allow users to customize sorting, you'll need referencable anonymous functions.<br>

<br>If you've used a functional language, you know how powerful these little functions are, and you'll miss them and want to implement them in languages that don't have them.<br><br></div>Cheers,<div><br></div>

<div>Andrew Pennebaker</div><div><a href="http://www.yellosoft.us" target="_blank">www.yellosoft.us</a></div><br><div class="gmail_quote">On Wed, Oct 19, 2011 at 2:04 PM, Florian Klämpfl <span dir="ltr"><<a href="mailto:florian@freepascal.org">florian@freepascal.org</a>></span> wrote:<br>

<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex;"><div class="im">Am 19.10.2011 10:16, schrieb Sven Barth:<br>
</div><div class="im">> Am 19.10.2011 09:31, schrieb Michael Fuchs:<br>
>> I would prefer a style like<br>
>><br>
>> myfunc := @function(x, y: Integer): Integer Result := x + y;<br>
><br>
> And how would you create more complex functions? In Pascal code blocks<br>
> are started with "begin" and ended with "end". I don't see a reason why<br>
> anonymous methods should differ here.<br>
><br>
> Also the example given by Embarcadero is a bit boring. The interesting<br>
> thing about anonymous methods (and nested functions types in FPC) is<br>
> that they can access variables of the surrounding function (at least I<br>
> hope that I've understand it correctly that nested function types can do<br>
> that).<br>
<br>
<br>
</div>The main difference between anonymous methods and nested functions is<br>
that one can return a reference to an anonymous method from a function,<br>
the anonymous method can access local variables from that function and<br>
even after exiting the function, the variables are still valid. This<br>
means that local variables accessed in a anonymous method end up on the<br>
heap.<br>
<br>
However, I fail to see reasonable use cases for anonymous methods<br>
<div><div></div><div class="h5">_______________________________________________<br>
fpc-pascal maillist  -  <a href="mailto:fpc-pascal@lists.freepascal.org">fpc-pascal@lists.freepascal.org</a><br>
<a href="http://lists.freepascal.org/mailman/listinfo/fpc-pascal" target="_blank">http://lists.freepascal.org/mailman/listinfo/fpc-pascal</a><br>
</div></div></blockquote></div><br>