Nice article, but the language embedded here is exactly the untyped lambda calculus, not a Lisp. You can tell because there are no tags: pair is given as \x y sel -&gt; sel x y, which is indeed the textbook way to encode pairs but does not provide enough to write CONSP.<p>If you wished to implement a subset of Lisp in LC faithfully you would need an encoding for sums - which would not be all that hard, but does reflect the distance between Lisp values and the raw abstractions of the lambda calculus. (There is also the more substantial matter of RPLACD, etc, but let&#x27;s just pretend that particular rabbit hole is not there.)