Parsing with Matches and Banana Clips
I find myself working with DSLs quite a bit, and thus I write a few parsers. Some languages are better than others for parsers and pattern matching is a technique that makes writing parsers a true joy....
View ArticleAsynchronous workflows in Clojure
Asynchronous workflows is a very powerful feature of F#, and recently I wanted to explore the state of the JVM and in particular Clojure when it comes to replicate the functionality. In this post I'll...
View ArticleScheme as an External DSL in Clojure
This is a follow-up post to my previous "Scheme in Clojure" post.This time we implement a Scheme interpreter as an external DSL. This means that we consider the DSL as completely foreign to the host...
View ArticleSome thoughts on Clojure performance
Edit: This post recently re-surfaced on hacker news and caused a bit of a stir, mainly because of a slightly sensational/misleading title (was "Why is Clojure so slow?"). I wrote this before Rich...
View ArticleAnnouncing Frinj, a practical unit-of-measure calculator DSL for Clojure
I am proud to announce a new Clojure project called "Frinj". Frinj is a practical unit-of-measure calculator DSL for Clojure. Key features;Tracks units of measure through all calculations allowing you...
View ArticleAdding Live Unit Feeds to Frinj
A couple of weeks has passed since I've pushed Frinj to github and blogged/tweeted about it. The response have been pretty awesome, one highlight being when @stuarthalloway showed me a frinj+datomic...
View ArticleWhat is a software company?
Software is different from most other things humans build, hence companies creating/selling/licensing software must be different from other 'production' companies as well? Some definitely are but the...
View ArticleDistributed Actors in Clojure
Here's another post on a topic that have been discussed since the dawn-of-time, is there is nice and idiomatic way to write Erlang/Actor style distributed programs in Clojure? There has certainly been...
View ArticleSome thoughts on logging
Have you ever tried to log from multi threaded program? Have you tried to make sense of the log output which multiple subsystems were logging to? Have you tried to do average latency calculations based...
View ArticleN-Queens with core.logic, take 1
I've been "hammock-reading" the excellent Reasoned Schemer book the last couple of months, on my quest trying to develop a gut feel for when logic programming, as defined by miniKanren/core.logic, is...
View ArticleN-Queens with core.logic, take 2
This post is a follow-up to my previous post on NQueens and core.logic, in which I tried to find the solutions using "pure" logic (without arithmetic goals) and basic minKanren / Reasoner Schemer...
View ArticleReplicating Datomic/Datalog queries with core.logic
I've been toying with Datomic recently, and I particularly like the power of it's query language (~Datalog). Mr Halloway showed a couple of months ago how the query engine is generic enough to be run...
View ArticleReplicating Datomic/Datalog queries with core.logic, take 2
This is a follow-up to my previous post on datalog-equivalent queries in core.logic.Here I present an alternate way to do the unification and join inside core.logic (without having to use...
View ArticleUntying the Recursive Knot
Here I present a couple of examples of the functional design pattern "untying the recursive knot". I've found this useful in a couple of occasions, for instance when breaking apart mutually recursive...
View ArticlecKanren time!
Mr David Nolen recently published core.logic 0.8.alpha2, with added cKanren (c for constraints) support. To celebrate this glorious event I'm writing up some core.logic/cKanren stuff I've been looking...
View ArticleSome more Datalog
I've written about datalog and Datomic a bit recently. To conclude here's another post comparing execution speed with the contrib.datalog library, by Jeffrey Straszheim. Clojure1.4 ready source can be...
View Article
More Pages to Explore .....