<div dir="ltr"><div class="gmail_default" style="font-family:georgia,serif;font-size:small">Shishir,</div><div class="gmail_default" style="font-family:georgia,serif;font-size:small"><br></div><div class="gmail_default" style="font-family:georgia,serif;font-size:small">You've already gotten some excellent descriptions.</div><div class="gmail_default" style="font-family:georgia,serif;font-size:small"><br></div><div class="gmail_default" style="font-family:georgia,serif;font-size:small">As a recovering OO programmer, I get to the same answer by a slightly different path, offered below for what it's worth.</div><div class="gmail_default" style="font-family:georgia,serif;font-size:small"><br></div><div class="gmail_default" style="font-family:georgia,serif;font-size:small">When I read the first line:</div><div class="gmail_default" style="font-family:georgia,serif;font-size:small"><br></div><blockquote style="margin:0px 0px 0px 40px;border:none;padding:0px"><div class="gmail_default" style="font-family:georgia,serif;font-size:small"><span style="font-family:monospace,monospace;font-size:12.8000001907349px">let add_cps x y = \k -> k (x+y)</span></div></blockquote><div class="gmail_default" style="font-family:georgia,serif;font-size:small"><br></div><div class="gmail_default" style="font-family:georgia,serif;font-size:small">I see a definition of a function (<span style="font-family:monospace,monospace;font-size:12.8000001907349px">add_cps</span>) with two arguments (<span style="font-family:monospace,monospace;font-size:12.8000001907349px">x</span> and <span style="font-family:monospace,monospace;font-size:12.8000001907349px">y</span>) whose evaluation yields a function (<span style="font-family:monospace,monospace;font-size:12.8000001907349px">\k -> k (x+y)</span>).</div><div class="gmail_default" style="font-family:georgia,serif;font-size:small"><br></div><blockquote style="margin:0px 0px 0px 40px;border:none;padding:0px"><div class="gmail_default" style="font-family:georgia,serif;font-size:small"><i>I started to write "an anonymous function" out of habit, but stopped myself. I don't think of functions as having names or not having names, any more than I think of expressions as having names or not. Variables are bound to (refer to) values, and a function is just another kind of value to which a variable can refer. (And multiple variables can refer to the same value, by the way, so none of them is really "the name" of the value, regardless of whether that value happens to be a function.)</i></div></blockquote><div class="gmail_default" style="font-family:georgia,serif;font-size:small"><br></div><div class="gmail_default" style="font-family:georgia,serif;font-size:small">So at this point, I can think of using the name <span style="font-family:monospace,monospace;font-size:12.8000001907349px">add_cps</span> in another expression, such as:</div><div class="gmail_default" style="font-family:georgia,serif;font-size:small"><br></div><blockquote style="margin:0px 0px 0px 40px;border:none;padding:0px"><div class="gmail_default" style="font-family:georgia,serif;font-size:small"><span style="font-family:monospace,monospace;font-size:12.8000001907349px">add_cps 3 4</span></div></blockquote><div class="gmail_default" style="font-family:georgia,serif;font-size:small"><br></div><div class="gmail_default" style="font-family:georgia,serif;font-size:small">which (by the substitution principle) must be equivalent to:</div><div class="gmail_default" style="font-family:georgia,serif;font-size:small"><br></div><blockquote style="margin:0px 0px 0px 40px;border:none;padding:0px"><div class="gmail_default" style="font-family:georgia,serif;font-size:small"><span style="font-family:monospace,monospace;font-size:12.8000001907349px">\k -> k (3+4)</span></div></blockquote><div class="gmail_default" style="font-family:georgia,serif;font-size:small"><br></div><div class="gmail_default" style="font-family:georgia,serif;font-size:small">That expression is clearly a function (because of the lambda) that takes a single argument and applies it to the expression <span style="font-family:monospace,monospace;font-size:12.8000001907349px">(3+4)</span> (which isn't yet evaluated, by the way, but when it is I expect it to yield <span style="font-family:monospace,monospace;font-size:12.8000001907349px">7</span>). So the argument to that function expression must itself be a function.</div><div class="gmail_default" style="font-family:georgia,serif;font-size:small"><br></div><div class="gmail_default" style="font-family:georgia,serif;font-size:small">When I get to the second line:</div><div class="gmail_default" style="font-family:georgia,serif;font-size:small"><br></div><blockquote style="margin:0px 0px 0px 40px;border:none;padding:0px"><div class="gmail_default" style="font-family:georgia,serif;font-size:small"><span style="font-family:monospace,monospace;font-size:12.8000001907349px">add_cps 3 4 $ print</span></div></blockquote><div class="gmail_default" style="font-family:georgia,serif;font-size:small"><br></div><div class="gmail_default" style="font-family:georgia,serif;font-size:small">I confess to cheating a bit (and the experts may want to offer me some correction). I mentally rewrite that as:</div><div class="gmail_default" style="font-family:georgia,serif;font-size:small"><br></div><blockquote style="margin:0px 0px 0px 40px;border:none;padding:0px"><div class="gmail_default" style="font-family:georgia,serif;font-size:small"><span style="font-family:monospace,monospace;font-size:12.8000001907349px">(add_cps 3 4) print</span></div></blockquote><div class="gmail_default" style="font-family:georgia,serif;font-size:small"><br></div><div class="gmail_default" style="font-family:georgia,serif;font-size:small">because the precedence rules tell me to evaluate the left argument of <span style="font-family:monospace,monospace;font-size:12.8000001907349px">$</span> before combining that with what follows.</div><div class="gmail_default" style="font-family:georgia,serif;font-size:small"><br></div><div class="gmail_default" style="font-family:georgia,serif;font-size:small">So I can apply the substitution principle to get</div><div class="gmail_default" style="font-family:georgia,serif;font-size:small"><br></div><blockquote style="margin:0 0 0 40px;border:none;padding:0px"><div class="gmail_default" style="font-family:georgia,serif;font-size:small"><span style="font-family:monospace,monospace;font-size:12.8000001907349px">(</span><span style="font-family:monospace,monospace;font-size:12.8000001907349px">\k -> k (3+4)</span><span style="font-family:monospace,monospace;font-size:12.8000001907349px">) print</span></div></blockquote><div class="gmail_default" style="font-family:georgia,serif;font-size:small"><br></div><div class="gmail_default" style="font-family:georgia,serif;font-size:small">and then apply it again to get</div><div class="gmail_default" style="font-family:georgia,serif;font-size:small"><br></div><blockquote style="margin:0 0 0 40px;border:none;padding:0px"><div class="gmail_default" style="font-family:georgia,serif;font-size:small"><span style="font-family:monospace,monospace;font-size:12.8000001907349px">print (3+4)</span></div></blockquote><div class="gmail_default" style="font-family:georgia,serif;font-size:small"><br></div><div class="gmail_default" style="font-family:georgia,serif;font-size:small">Hope this helps,</div><div class="gmail_default" style="font-family:georgia,serif;font-size:small">-jn-</div><div class="gmail_default" style="font-family:georgia,serif;font-size:small"><br></div></div><div class="gmail_extra"><br><div class="gmail_quote">On Thu, May 28, 2015 at 8:57 AM, Shishir Srivastava <span dir="ltr"><<a href="mailto:shishir.srivastava@gmail.com" target="_blank">shishir.srivastava@gmail.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr"><div>Hi, </div><div><br></div><div>Reading on continuation I've came across this new style of creating the functions which I guess is not very clear in how it works</div><div><br></div><div>---------------</div><div><font face="monospace, monospace">Prelude> let add_cps x y = \k -> k (x+y)</font><br></div><div><div><font face="monospace, monospace">Prelude> add_cps 3 4 $ print </font></div><div><font face="monospace, monospace">7</font></div></div><div>---------------<br></div><div><br></div><div>I have some questions as to </div><div>1) what is the role of variable 'k' and what eventually happens to it.</div><div>2) How does print work after the $ because there is clearly no parameter being passed to it.</div><div><br></div><div>Thanks,</div><div><div><div dir="ltr"><font color="#0b5394"><font style="background-color:rgb(255,255,255)"><font size="2" face="georgia, serif">Shishir Srivastava</font><br></font></font><br></div></div></div>
</div>
<br>_______________________________________________<br>
Beginners mailing list<br>
<a href="mailto:Beginners@haskell.org">Beginners@haskell.org</a><br>
<a href="http://mail.haskell.org/cgi-bin/mailman/listinfo/beginners" target="_blank">http://mail.haskell.org/cgi-bin/mailman/listinfo/beginners</a><br>
<br></blockquote></div><br><br clear="all"><div><br></div>-- <br><div class="gmail_signature">Beauty of style and harmony and grace and good rhythm depend on simplicity. - Plato</div>
</div>