2009/7/8 Rick Moynihan <span dir="ltr">&lt;<a href="mailto:rick.moynihan@gmail.com">rick.moynihan@gmail.com</a>&gt;</span><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;">

Perhaps I&#39;m nitpicking but SQL/regexes are actually declarative<br>
languages, likewise the definition you supplied is a great description<br>
of declarative languages.<br>
<br>
Functional programming is a style of programming that encourages you<br>
to write your code as &#39;pure functions&#39;, i.e. procedure&#39;s that given<br>
the same inputs always return the same result without mutating state<br>
or causing side effects.<br>
<br>
This said, there can be a lot of similarity between functional<br>
langauges and declarative ones, as functional languages allow you to<br>
easily raise the abstraction so as to provide a declarative<br>
interpretation.<br>
<br>
I think the conflation of the two has probably come from your Haskell<br>
exposure... The reason Haskell is sometimes described as declarative<br>
comes more from its laziness i.e. leaving evaluation order up to the<br>
language than anything else.</blockquote><div><br>I certainly don&#39;t mind a bit of nitpicking, I&#39;m quite partial to it myself :)<br><br>I agree with what you say, although I&#39;d counter (in a way that actual agrees with you, but I&#39;m not sure what the word for that is?) that you can&#39;t write in a functional style without being declarative. Essentially, pure functions are declarations, which is why they can be used lazily. But it&#39;s not the laziness that makes them declarative, that&#39;s a choice made by the compiler. Because they&#39;re pure, they don&#39;t alter program flow and are therefore declarative. To use them you&#39;d have to build an impure function and call them from that, unless you want one of those progs that doesn&#39;t speak to the outside world, I forget the name. <br>
<br>You could take any of the languages, including Haskell (and certainly I&#39;ve seen it done to SQL a lot), and force a procedural style onto them, but then they also wouldn&#39;t be (as) declarative anymore. <br><br>Maybe this is down to my main exposure being Haskell, and the style of SQL I write - which is correct (if I do say so myself), and not the sort I&#39;ve seen most developers I&#39;ve worked with use. The bane of my existence is having to explain why booleans shouldn&#39;t be in databases and what 3NF is. To professionals!<br>
</div><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;"><br>
<br>
Anyway, you should check out clojure, it&#39;s a practical lisp for the</blockquote><div><br>I was about to write &quot;I will&quot;, but then I read the words &quot;practical lisp&quot; :)<br><br>Iain<br> <br></div></div>
<br>