I already know the answer to **MD1**, so I'll let it sit for a while :)

[@Keith](https://forum.azimuthproject.org/profile/2009/Keith%20E.%20Peterson), a difference list is what you get when you partially apply `append` to one argument. Essentially:

(define (dlist xs)
(lambda (ys) (append xs ys)))

> ((dlist '(1 2 3)) '(4 5))
'(1 2 3 4 5)

Defining `append` and `empty` for difference lists, as in **Puzzle MD1**, is what makes difference lists interesting.