LispCast http://www.lispcast.com/ A blog about the simple joys of functional programming. en Atom code explanation http://www.lispcast.com/atom-problem http://www.lispcast.com/atom-problem Thu 28 Aug 2014 05:43:39 PM CDT I go over a real-world example of how atoms and immutable values allow you to compose constructs in ways that are easy to reason about and less prone to error. <p><center><a href="http://www.lispcast.com/atom-problem"><span class="brackets">&lt;</span><font face="Times New Roman">&lambda;</font><span class="brackets">&gt;</span></a></center></p> Two Kinds of Bootstrapping http://www.lispcast.com/two-kinds-of-bootstrapping http://www.lispcast.com/two-kinds-of-bootstrapping Sat 23 Aug 2014 10:43:37 AM CDT I like languages with a small core that is extensible. The languages tend to be weird and require less code to bootstrap. <p><center><a href="http://www.lispcast.com/two-kinds-of-bootstrapping"><span class="brackets">&lt;</span><font face="Times New Roman">&lambda;</font><span class="brackets">&gt;</span></a></center></p> Clojure is Imperative http://www.lispcast.com/clojure-is-imperative http://www.lispcast.com/clojure-is-imperative Fri 22 Aug 2014 11:51:19 PM CDT Clojure is an imperative language. Its operations are defined in terms of concrete actions. But those actions are often the same actions available to the programmer at runtime. This makes it easy to bootstrap. <p><center><a href="http://www.lispcast.com/clojure-is-imperative"><span class="brackets">&lt;</span><font face="Times New Roman">&lambda;</font><span class="brackets">&gt;</span></a></center></p> Complex Syntax http://www.lispcast.com/complex-syntax http://www.lispcast.com/complex-syntax Tue 19 Aug 2014 09:48:13 AM CDT Lisps are revered for their simple syntax, but parens are complex. They complect function calls and macro calls, which have drastically different semantics. <p><center><a href="http://www.lispcast.com/complex-syntax"><span class="brackets">&lt;</span><font face="Times New Roman">&lambda;</font><span class="brackets">&gt;</span></a></center></p> Is core.async Against the Clojure Philosophy? http://www.lispcast.com/is-core-async-against-clojure-philosophy http://www.lispcast.com/is-core-async-against-clojure-philosophy Wed 06 Aug 2014 07:32:36 AM CDT Clojure core.async is a way to manage mutable state. Isn't that against functional programming? <p><center><a href="http://www.lispcast.com/is-core-async-against-clojure-philosophy"><span class="brackets">&lt;</span><font face="Times New Roman">&lambda;</font><span class="brackets">&gt;</span></a></center></p> Reification http://www.lispcast.com/reification http://www.lispcast.com/reification Tue 05 Aug 2014 10:39:50 PM CDT Reification means making an abstraction into a concrete value that can be manipulated at runtime. Reification is the core of what makes a language dynamic. Three types of reification in Clojure are discussed. <p><center><a href="http://www.lispcast.com/reification"><span class="brackets">&lt;</span><font face="Times New Roman">&lambda;</font><span class="brackets">&gt;</span></a></center></p> core.async in Browsers http://www.lispcast.com/core-async-browser-motivation http://www.lispcast.com/core-async-browser-motivation Tue 29 Jul 2014 04:36:36 PM CDT Javascript's concurrency model forces code to give up control of when a callback will be called. `core.async` gives you back that control and hence lets you code in a more natural style. <p><center><a href="http://www.lispcast.com/core-async-browser-motivation"><span class="brackets">&lt;</span><font face="Times New Roman">&lambda;</font><span class="brackets">&gt;</span></a></center></p> Stop Refactoring and Start Factoring http://www.lispcast.com/stop-refactoring-and-start-factoring http://www.lispcast.com/stop-refactoring-and-start-factoring Thu 24 Jul 2014 04:12:16 PM CDT Refactoring is focused on the quality of code, while factoring aims to uncover the underlying beauty of the problem domain, as expressed in code. Instead of cleaning up your code, try factoring. <p><center><a href="http://www.lispcast.com/stop-refactoring-and-start-factoring"><span class="brackets">&lt;</span><font face="Times New Roman">&lambda;</font><span class="brackets">&gt;</span></a></center></p> Ring 1.3 http://www.lispcast.com/ring-1-3 http://www.lispcast.com/ring-1-3 Tue 22 Jul 2014 11:53:00 PM CDT Ring is great because it closely models the HTTP message format using native Clojure data structures. It strictly defines a message format that any software can use and rely on. With Ring 1.3, the specification has gotten even closer to the HTTP spec. <p><center><a href="http://www.lispcast.com/ring-1-3"><span class="brackets">&lt;</span><font face="Times New Roman">&lambda;</font><span class="brackets">&gt;</span></a></center></p> Church vs Curry Types http://www.lispcast.com/church-vs-curry-types http://www.lispcast.com/church-vs-curry-types Tue 15 Jul 2014 10:26:15 PM CDT Static vs dynamic typing debates often flounder because the debators see from two different perspectives without knowing it. Learning to identify the two perspectives can calm the discussion. The tension between the two perspectives has led to Gradual Typing and other technologies. <p><center><a href="http://www.lispcast.com/church-vs-curry-types"><span class="brackets">&lt;</span><font face="Times New Roman">&lambda;</font><span class="brackets">&gt;</span></a></center></p>