I don&#39;t think I sent this to the group last time.&nbsp; Something odd still about how I interact with this group vs. the other ones I&#39;m in:<br><div class="gmail_quote">-------------------------------------------------------<br>
<br>ok, I am new, too,&nbsp; to fp, so, perhaps partially to help me learn ... I was somewhat confused by the stop example, at first, also.<br><br>I initially thought that once you defined &quot;stop&quot; one time, you were set forever.&nbsp; I was sort of assuming symmetry between &quot;server&quot; and &quot;stop&quot;. . . . like, after the definition, you could just call (stop) after every call to (server 8081).&nbsp; But the example was adamant that we had somehow &quot;fixed&quot; the problem of not shutting down the listener.&nbsp; So I started thinking it through, like, &quot;what I really need is a handle to something, like the thread&nbsp; . ..&nbsp; yeah the ACTUAL one that the listener is using . . . .so I can kill it&quot;.&nbsp; And that was it.&nbsp; I understood enough to know that what&#39;s needed is to <u>redefine stop every time you start the server</u>.&nbsp; That&#39;s the part I didn&#39;t grok right away.&nbsp; You&#39;re not making a reusable function called &quot;(stop)&quot; the way you are making a reusable function &quot;(server)&quot;.<br>

<br>Not only CAN you return a function, the REASON you are in this case is so that its execution will be tied (bound) to the thread that was started.&nbsp; I am thinking this is an example of a &quot;closure&quot;.<br><br>I guess in OO, you&#39;d make a server &quot;instance&quot;, and it would have a &quot;stop&quot; command . . .. or you could &quot;delete&quot; it (in C++), which would call the &quot;destructor&quot; . . . or in Java, there&#39;s some what of an opportunity in &quot;finalize()&quot;, but not a reliable one.&nbsp; In Python, I&#39;m thinking you&#39;d have a &quot;stop&quot;, and it&#39;d be obvious that construction and &quot;stopping&quot; aren&#39;t symmetric operations.<br>

<br>Now that I&#39;ve made this comparison, it seems like the argument you have for fp reduces from &quot;you can&#39;t do this in OO&quot; to, &quot;you need more boilerplate and fanfare to do it in OO&quot; (possibly a whole file, possibly two -- one for the header and one for the implementation, RAII semantics on the constructor, etc).<br>
<br>--------------------<br>Then Macro said:<br><br><br>
Yes, you are on the right track. It would be a lot more verbose in OO.<br>
There are some things that are done better by an OO language (e.g.<br>
encapsulation and polymorphic dispatch). Others, however, are<br>
incredibly hard to do (and should not as demonstrated by FP).<br>
<br>
--<br>
<br>
Cheers,<br>
<font color="#888888"><br>
Marco</font><br><br><div><div></div><div class="Wj3C7c"><br>
<br><div class="gmail_quote">On Fri, Feb 13, 2009 at 5:03 PM, Marco Morazan <span dir="ltr">&lt;<a href="mailto:morazanm@gmail.com" target="_blank">morazanm@gmail.com</a>&gt;</span> wrote:<br><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">

<div>On Fri, Feb 13, 2009 at 1:35 PM, Jesus Boadas &lt;<a href="mailto:jboadas@gmail.com" target="_blank">jboadas@gmail.com</a>&gt; wrote:<br>
</div><div>&gt; Thanks I understand now, this is new to me. My usual functions only return<br>
&gt; values, never could imagine that a function could return a function, I was<br>
&gt; doing some research and this is called higher order functions or I am in a<br>
&gt; mistake?.<br>
&gt;<br>
<br>
</div>No, you are not. You are quite right. It is quite elegant, no? :-)<br>
<br>
Consider, now, a function, f, that returns a function as its value<br>
after being applied to a set of arguments. A nice way to think of such<br>
a function is as specialized-function generator. For example, consider<br>
the problem of creating functions (i.e. what you do when you write<br>
functions) that return a list with the results of adding a constant to<br>
every element of a list of numbers. You would like to write a function<br>
that takes as input a number (i.e. the constant to add) and that<br>
returns a function that takes as input a list of numbers and that<br>
returns a list by adding the given constant to every element of the<br>
list. The code for this could look something like this:<br>
<br>
; make-list-adder: number --&gt; (list-of-numbers --&gt; list-of-numbers)<br>
(define (make-list-adder n)<br>
 &nbsp; &nbsp;; add: number --&gt; number<br>
 &nbsp; &nbsp;(define (add m) (+ n m))<br>
<br>
 &nbsp; &nbsp;; add-n-to-list: list-of-numbers --&gt; list-of-numbers<br>
 &nbsp; &nbsp;(define (add-n-to-list lon) (map add lon))<br>
<br>
&nbsp;add-n-to-list)<br>
<br>
Every time make-list-adder is applied to an argument it returns a<br>
function for which n is fixed. We can now, for example, define<br>
functions to add 1 and to add 5 to every element of a list of numbers<br>
without having to explicitly write code (in the conventional sense):<br>
<br>
(define add-1-to-list (make-list-adder 1))<br>
<br>
(define add-5-to-list (make-list-adder 5))<br>
<br>
The above definitions should illustrate that we have not written the<br>
code for neither add-1-to-list nor add-5-to-list in the conventional<br>
sense, but yet we have functions we can use!<br>
<br>
(add-1-to-list (list 1 2 3)) = (list 2 3 4)<br>
<br>
(add-5-to-list (list 1 2 3)) = (list 6 7 8)<br>
<br>
By writing one abstract function, we have the power to define a whole<br>
class of functions. I hope this gives you an appetite to learn more<br>
about HOFs.<br>
<br>
--<br>
<br>
Cheers,<br>
<font color="#888888"><br>
Marco<br>
</font><div><div></div><div>_________________________________________________<br>
 &nbsp;For list-related administrative tasks:<br>
 &nbsp;<a href="http://list.cs.brown.edu/mailman/listinfo/plt-scheme" target="_blank">http://list.cs.brown.edu/mailman/listinfo/plt-scheme</a><br>
</div></div></blockquote></div><br>
</div></div></div><br>