What I don't get is how I build an application using LISP. From the article, the todo list wasn't really a list, it was a todo function call that took tasks as arguments unless there was a missing quote. That seems to be a point missed by the author. With the macro, he was able to format the tasks themselves, but after applying the macro you'd still be left with a todo function and done arguments. I don't see where that gets called.
LISP seems to work best as an evolving environment. I can see where a LISP machine could be powerful for defining your own DSL as you try to parse through some data. I also saw the power in how you abstract the problem, really taking advantage of code reuse in a powerful way. I don't see how you write an application.
Is there some resource or there that can help me bridge this gap? I feel like this is like trying to use Mathematica to write a program. Mathematica is great for calculating as LISP seems great for processing data, but I'm stuck in seeing how I can utilize it for anything beyond a contained process. At least with Clojure or F#, I could still use Java or C# for the entry point and call into an FP block of code for calculations and processing. How would I do something with Haskell or Scheme?