On Sat, Apr 18, 2009 at 11:11 AM, michael rice <span dir="ltr">&lt;<a href="mailto:nowgate@yahoo.com">nowgate@yahoo.com</a>&gt;</span> wrote:<br><div class="gmail_quote"><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">
<table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td style="font-family: inherit; font-style: inherit; font-variant: inherit; font-weight: inherit; font-size: inherit; line-height: inherit; font-size-adjust: inherit; font-stretch: inherit;" valign="top">
<div class="im">&gt; To compare two functions in C, I would compare their machine addresses.<br>&gt;<br><br></div><div class="im">Why would you need that at all?<br><br></div>How would *you* do it?</td></tr></tbody></table>
</blockquote><div><br>Do what?  What is the problem?<br><br>No, I don&#39;t mean &quot;comparing two functions&quot;.  I rather mean, why are you comparing these functions?  What question is the comparison answering, and how are you using that answer?  Is address comparison really what your code wants, or do you want some stronger property?<br>
<br>Luke<br> <br></div><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;"><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td style="font-family: inherit; font-style: inherit; font-variant: inherit; font-weight: inherit; font-size: inherit; line-height: inherit; font-size-adjust: inherit; font-stretch: inherit;" valign="top">
<div class="im"><br><br>Michael<br><br>================<br><br>--- On <b>Sat, 4/18/09, Eugene Kirpichov <i>&lt;<a href="mailto:ekirpichov@gmail.com" target="_blank">ekirpichov@gmail.com</a>&gt;</i></b> wrote:<br></div><blockquote style="border-left: 2px solid rgb(16, 16, 255); margin-left: 5px; padding-left: 5px;">
<div class="im"><br>From: Eugene Kirpichov &lt;<a href="mailto:ekirpichov@gmail.com" target="_blank">ekirpichov@gmail.com</a>&gt;<br>Subject: Re: [Haskell-cafe] General function to count list elements?<br>To: &quot;michael rice&quot; &lt;<a href="mailto:nowgate@yahoo.com" target="_blank">nowgate@yahoo.com</a>&gt;<br>
Cc: <a href="mailto:haskell-cafe@haskell.org" target="_blank">haskell-cafe@haskell.org</a><br></div>Date: Saturday, April 18, 2009, 12:39 PM<br><br><div>2009/4/18 michael rice &lt;<a href="http://mc/compose?to=nowgate@yahoo.com" target="_blank">nowgate@yahoo.com</a>&gt;:<div class="im">
<br>&gt; I know functions can be compared in Scheme<br>&gt;<br>&gt;
 Welcome to DrScheme, version 4.1 [3m].<br>&gt; Language: Swindle; memory limit: 128 megabytes.<br>&gt;&gt; (equal? equal? equal?)<br>&gt; #t<br>&gt;&gt;<br>&gt;<br><br></div><div class="im">That&#39;s not the functions being compared, but the memory addresses of<br>
the code implementing them. If your goal is comparing functions to<br>answer a question &quot;Are these two values indistinguishable?&quot;, equal?<br>doesn&#39;t help you, because it may answer &#39;false&#39; even if these two<br>
values are indistinguishable from a mathematical point of view.<br><br>&gt;<br></div><div class="im">&gt; but apparently not in Haskell<br>&gt;<br>&gt; [michael@localhost ~]$ ghci<br>&gt; GHCi, version 6.10.1: <a href="http://www.haskell.org/ghc/%C2%A0" target="_blank">http://www.haskell.org/ghc/ </a> :? for help<br>
&gt; Loading package ghc-prim ... linking ... done.<br>&gt; Loading package integer ... linking ... done.<br>&gt; Loading package base ... linking ... done.<br>&gt; Prelude&gt; (==) (==) (==)<br>&gt;<br>&gt;
 &lt;interactive&gt;:1:0:<br></div><div class="im">&gt;     No instance for (Eq (a -&gt; a -&gt; Bool))<br>&gt;       arising from a use of `==&#39; at &lt;interactive&gt;:1:0-13<br></div><div class="im">&gt;     Possible fix: add an instance declaration for (Eq (a -&gt; a -&gt; Bool))<br>
&gt;     In the expression: (==) (==) (==)<br>&gt;     In the definition of `it&#39;: it = (==) (==) (==)<br>&gt; Prelude&gt;<br>&gt;<br>&gt; though I&#39;m new at Haskell and may not be posing the question properly.<br>&gt;<br>
&gt; I would think a language with 1st-class support for functions would<br>&gt; certainly include comparing them.<br>&gt;<br><br></div><div class="im">Again, this is first-class support for memory addresses of code<br>representing functions.<br>
<br></div><div class="im">&gt; To compare two functions in C, I would compare their machine addresses.<br>&gt;<br><br></div><div class="im">Why would you need that at all?<br><br></div><div><div></div><div class="h5">&gt; Michael<br>
&gt;<br>&gt;<br>&gt; --- On Sat, 4/18/09,
 Eugene Kirpichov &lt;<a href="http://mc/compose?to=ekirpichov@gmail.com" target="_blank">ekirpichov@gmail.com</a>&gt; wrote:<br>&gt;<br>&gt; From: Eugene Kirpichov &lt;<a href="http://mc/compose?to=ekirpichov@gmail.com" target="_blank">ekirpichov@gmail.com</a>&gt;<br>
&gt; Subject: Re: [Haskell-cafe] General function to count list elements?<br>&gt; To: &quot;michael rice&quot; &lt;<a href="http://mc/compose?to=nowgate@yahoo.com" target="_blank">nowgate@yahoo.com</a>&gt;<br>&gt; Cc: <a href="http://mc/compose?to=haskell-cafe@haskell.org" target="_blank">haskell-cafe@haskell.org</a><br>
&gt; Date: Saturday, April 18, 2009, 11:39 AM<br>&gt;<br>&gt; Could you then provide an example of two functions that *are* equal,<br>&gt; or, even better, a definition of equality for arbitrary functions?<br>&gt; Since Haskell may be compiled into C, this must be a definition that<br>
&gt; is implementable in
 C.<br>&gt;<br>&gt; 2009/4/18 michael rice &lt;<a href="http://mc/compose?to=nowgate@yahoo.com" target="_blank">nowgate@yahoo.com</a>&gt;:<br>&gt;&gt; Though I haven&#39;t tried it out, it&#39;s trying to use my function to count<br>
&gt;&gt; functions.<br>&gt;&gt;<br>&gt;&gt; The first argument is the identity function.<br>&gt;&gt;<br>&gt;&gt; The second argument is a list of a different form of the identity<br>&gt;&gt; function.<br>&gt;&gt;<br>&gt;&gt; Though the two identity functions, given the same input, would produce the<br>
&gt;&gt; same output, I doubt they would be equal.<br>&gt;&gt;<br>&gt;&gt; So my guess at an answer would be zero.<br>&gt;&gt;<br>&gt;&gt; Michael<br>&gt;&gt;<br>&gt;&gt; --- On Sat, 4/18/09, Eugene Kirpichov &lt;<a href="http://mc/compose?to=ekirpichov@gmail.com" target="_blank">ekirpichov@gmail.com</a>&gt; wrote:<br>
&gt;&gt;<br>&gt;&gt; From: Eugene Kirpichov &lt;<a href="http://mc/compose?to=ekirpichov@gmail.com" target="_blank">ekirpichov@gmail.com</a>&gt;<br>&gt;&gt; Subject: Re: [Haskell-cafe] General function to count list elements?<br>
&gt;&gt; To: &quot;michael rice&quot; &lt;<a href="http://mc/compose?to=nowgate@yahoo.com" target="_blank">nowgate@yahoo.com</a>&gt;<br>&gt;&gt; Cc: <a href="http://mc/compose?to=haskell-cafe@haskell.org" target="_blank">haskell-cafe@haskell.org</a><br>
&gt;&gt; Date: Saturday, April 18, 2009, 11:03 AM<br>&gt;&gt;<br>&gt;&gt; What should<br>&gt;&gt;<br>&gt;&gt; count (\x -&gt; x) (replicate 10 (\y -&gt; if 1==1 then y else undefined))<br>&gt;&gt;<br>&gt;&gt; return?<br>&gt;&gt;<br>
&gt;&gt; 2009/4/18 michael rice &lt;<a href="http://mc/compose?to=nowgate@yahoo.com" target="_blank">nowgate@yahoo.com</a>&gt;:<br>&gt;&gt;&gt; Is there a general function to count list elements. I&#39;m trying this<br>&gt;&gt;&gt;<br>
&gt;&gt;&gt; count :: a -&gt; [a] -&gt; Int<br>&gt;&gt;&gt;
 count x ys = length (filter (== x) ys)<br>&gt;&gt;&gt;<br>&gt;&gt;&gt; with this error upon loading<br>&gt;&gt;&gt;<br>&gt;&gt;&gt; =============<br>&gt;&gt;&gt;<br>&gt;&gt;&gt; [michael@localhost ~]$ ghci count<br>&gt;&gt;&gt; GHCi, version 6.10.1: <a href="http://www.haskell.org/ghc/%C2%A0" target="_blank">http://www.haskell.org/ghc/ </a> :? for help<br>
&gt;&gt;&gt; Loading package ghc-prim ... linking ... done.<br>&gt;&gt;&gt; Loading package integer ... linking ... done.<br>&gt;&gt;&gt; Loading package base ... linking ... done.<br>&gt;&gt;&gt; [1 of 1] Compiling Main             ( count.hs, interpreted )<br>
&gt;&gt;&gt;<br>&gt;&gt;&gt; count.hs:2:29:<br>&gt;&gt;&gt;     Could not deduce (Eq a) from the context ()<br>&gt;&gt;&gt;       arising from a use of `==&#39; at count.hs:2:29-32<br>&gt;&gt;&gt;     Possible fix:<br>&gt;&gt;&gt;
       add (Eq a) to the context of the type signature for `count&#39;<br>&gt;&gt;&gt;     In the first argument of `filter&#39;, namely `(== x)&#39;<br>&gt;&gt;&gt;     In the first argument of `length&#39;, namely `(filter (== x) ys)&#39;<br>
&gt;&gt;&gt;     In the expression: length (filter (== x) ys)<br>&gt;&gt;&gt; Failed, modules loaded: none.<br>&gt;&gt;&gt; Prelude&gt;<br>&gt;&gt;&gt;<br>&gt;&gt;&gt; =============<br>&gt;&gt;&gt;<br>&gt;&gt;&gt; Not sure what it&#39;s trying to tell me other than I need an (Eq a)<br>
&gt;&gt;&gt; somewhere.<br>&gt;&gt;&gt;<br>&gt;&gt;&gt; Michael<br>&gt;&gt;&gt;<br>&gt;&gt;&gt;<br>&gt;&gt;&gt;<br>&gt;&gt;&gt;<br>&gt;&gt;&gt; _______________________________________________<br></div></div><div class="im">
&gt;&gt;&gt; Haskell-Cafe mailing list<br>&gt;&gt;&gt; <a href="http://mc/compose?to=Haskell-Cafe@haskell.org" target="_blank">Haskell-Cafe@haskell.org</a><br>&gt;&gt;&gt; <a href="http://www.haskell.org/mailman/listinfo/haskell-cafe" target="_blank">http://www.haskell.org/mailman/listinfo/haskell-cafe</a><br>
&gt;&gt;&gt;<br>&gt;&gt;&gt;<br>&gt;&gt;<br>&gt;&gt;<br>&gt;&gt;<br></div><div class="im">&gt;&gt; --<br>&gt;&gt; Eugene Kirpichov<br>&gt;&gt; Web IR developer, <a href="http://market.yandex.ru" target="_blank">market.yandex.ru</a><br>
&gt;&gt;<br>&gt;&gt;<br>&gt;<br>&gt;<br>&gt;<br>&gt; --<br>&gt; Eugene Kirpichov<br>&gt; Web IR developer, <a href="http://market.yandex.ru" target="_blank">market.yandex.ru</a><br>&gt;<br>&gt;<br><br><br><br>-- <br>Eugene Kirpichov<br>
Web IR developer, <a href="http://market.yandex.ru" target="_blank">market.yandex.ru</a><br></div></div></blockquote></td></tr></tbody></table><br>

      <br>_______________________________________________<br>
Haskell-Cafe mailing list<br>
<a href="mailto:Haskell-Cafe@haskell.org">Haskell-Cafe@haskell.org</a><br>
<a href="http://www.haskell.org/mailman/listinfo/haskell-cafe" target="_blank">http://www.haskell.org/mailman/listinfo/haskell-cafe</a><br>
<br></blockquote></div><br>