Writing a Lisp: Continuations

, in Lisp, Haskell

This week I added continuations to my Lisp. They’re a fascinating feature, and a popular demand in the survey. It has been the most challenging feature so far, both to implement and explain, but the result has been worth it.

A beautiful LaTeX article template

, in LaTeX

I like messing with typography from time to time. As a programmer, I quickly fell in love with TeX. This is my personal article template, developed during the last few months. Have fun with it :)

Stimulate your Creativity

, in Creativity

Wikipedia defines creativity as a phenomenon whereby something new and somehow valuable is formed. Because creativity is essential to me as a programmer, the question of how to improve my creativity has always fascinated me. In this article I share what has worked for me so far.

Abstracting the Clojure def-macro pattern

, in Clojure

Wrapping a function in a ‘def-macro’ is a common Clojure pattern. This practice serves two purposes: providing a nicer syntax for definitions, and controlling evaluation order. Although simple to understand, this pattern is somewhat repetitive. Introducing: a higher-order macro that relieves this pain.

Writing a Lisp: Reader Macro’s

, in Lisp, Haskell

Monday’s survey revealed that Reader Macro’s are your most requested feature. They replace built-in syntax, and enable users to extend the syntax from within the language. Implementing them right is difficult, however. Let’s try.

Writing a Lisp: help me decide what to tackle next

, in Lisp, Survey

Hi! My name is Rein van der Woerd.
I’m currently in the process of developing a Lisp, for both learning and teaching.
My goal is to derive the best possible language from the smallest set of core features. Your answers to these will help me know what will help you learn the most.

Writing a Lisp: Debugger

, in Lisp, Haskell

To make debugging easier, I added a simple pry-style debugger to my lisp. It immediately spawns a new repl in the current envirment, allowing you to poke around at will. Debug repl’s can be nested to arbitrary depth, and exited with :q.

Categories in OO: Monads

, in PHP, Categories

Last time we used Maybe to encapsulate an optional value, performing operations on it while remaining ignorant of the actual presence of that value. Now we turn to the famous Monad, starting with an example that illustrates it’s purpose.

Eve: everything is a record

, in Eve

A project I’m folowing with great interest is Eve. It’s based on a single unifying principle: everything is a record. Today I’d like to explore some of the implications of this idea.

Categories in OO: Functors

, in PHP, Categories

Today I’m starting my series on categories in OO. My goal is to explain these concepts to programmers who are already familiar with object-oriented programming, but new to functional programming.

Reducing with for-fold

, in Clojure

Complicated reduce algorithms are still tricky for me sometimes. Clojure’s for makes map more visual, which makes it easier for me to engage my imagination. Racket extends this idea to reduce with for/fold, and also supports reducing multiple collections. Let’s port it over to Clojure.