<?xml version="1.0" encoding="UTF-8"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<title>&lt;sub&gt;Relevant - Drafts</title>
	<subtitle>Not quite irrelevant.</subtitle>
	<link rel="self" type="application/atom+xml" href="https://subrelevant.cc/drafts/atom.xml"/>
	<link rel="alternate" type="text/html" href="https://subrelevant.cc/"/>
	<updated>2026-08-01T00:52:34+00:00</updated>
	<id>https://subrelevant.cc/drafts/atom.xml</id>
	<entry xml:lang="en">
		<title>Functional lazy evaluated python</title>
		<published>2026-08-01T00:52:34+00:00</published>
		<updated>2026-08-01T00:52:34+00:00</updated>
		<author><name>????</name></author>
		<summary type="html">Not an interpretation, not an emulation, just pure functional programming</summary>
		<content type="html" xml:base="https://subrelevant.cc/drafts/python-pure-functional/">&lt;p&gt;One day while trying to sleep after a day of writing lisp I got out of bed and on my phone I programmed something looking roughly like this:&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #BFBDB6; background-color: #0D1017;&quot;&gt;&lt;code data-lang=&quot;python&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;Σ&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt; lambda&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt; f&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt;*&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;a&lt;&#x2F;span&gt;&lt;span&gt;:&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FFB454;&quot;&gt; f&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt;*&lt;&#x2F;span&gt;&lt;span&gt;a)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;define&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt; lambda&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt; f&lt;&#x2F;span&gt;&lt;span&gt;:&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F07178;&quot;&gt; globals&lt;&#x2F;span&gt;&lt;span&gt;()&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F07178;&quot;&gt;__setitem__&lt;&#x2F;span&gt;&lt;span&gt;(f&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;.&lt;&#x2F;span&gt;&lt;span&gt;__code__&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;.&lt;&#x2F;span&gt;&lt;span&gt;co_varnames[&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;0&lt;&#x2F;span&gt;&lt;span&gt;]&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span&gt;_k&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt;:=&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;lambda&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt; *&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;n&lt;&#x2F;span&gt;&lt;span&gt;:&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FFB454;&quot;&gt;f&lt;&#x2F;span&gt;&lt;span&gt;(_k&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt; *&lt;&#x2F;span&gt;&lt;span&gt;n))&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt; or&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt; True&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;Pair&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span style=&quot;color: #39BAE6;&quot;&gt; type&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt;&amp;quot;Pair&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span&gt;()&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span&gt;{&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt;&amp;quot;__init__&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;:&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;lambda&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt; s&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;a&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;b&lt;&#x2F;span&gt;&lt;span&gt;:&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F07178;&quot;&gt;setattr&lt;&#x2F;span&gt;&lt;span&gt;(s&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt;&amp;quot;t&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span&gt;(a&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span&gt;b))&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt;&amp;quot;__getitem__&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;:&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;lambda&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt; s&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;i&lt;&#x2F;span&gt;&lt;span&gt;:s&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;.&lt;&#x2F;span&gt;&lt;span&gt;t[i]&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt;&amp;quot;__repr__&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;:&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;lambda&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt; s&lt;&#x2F;span&gt;&lt;span&gt;:&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;f&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt;&amp;quot;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #95E6CB;&quot;&gt;{&lt;&#x2F;span&gt;&lt;span&gt;s[&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;0&lt;&#x2F;span&gt;&lt;span&gt;]&lt;&#x2F;span&gt;&lt;span style=&quot;color: #95E6CB;&quot;&gt;} {&lt;&#x2F;span&gt;&lt;span&gt;s[&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;1&lt;&#x2F;span&gt;&lt;span&gt;]&lt;&#x2F;span&gt;&lt;span style=&quot;color: #95E6CB;&quot;&gt;}&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt;)&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FFB454;&quot;&gt;replace&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt;&amp;quot; (&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt;&amp;quot; &amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FFB454;&quot;&gt;replace&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt;&amp;quot;))&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt;&amp;quot;)&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;)})&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;That is just boilerplate + sugar, I know it looks ugly, but imperative languages usually do.&lt;&#x2F;p&gt;
&lt;p&gt;What&#x27;s interesting about that however is that the first line is all you need to get something similar to lisp Sexpr-likes; &lt;code&gt;Σ(foo, 1, 2, 3)&lt;&#x2F;code&gt; instead of the regular &lt;code&gt;foo(1,2,3)&lt;&#x2F;code&gt;.&lt;&#x2F;p&gt;
&lt;p&gt;The third line is of no interest, just a class that pretty prints lisp lists, it&#x27;s completely useless but we want lisp pairs as separate classes for code hygiene, as things get messy easily using bare tuples.&lt;&#x2F;p&gt;
&lt;p&gt;The second one is more interesting, it takes a function, and stores in globals() a lambda that calls the function, with itself as first argument + any other argument passed to it, named with the name of the first argument of the function. In other words a define function, and that is really all we need to start with the most basic iteration of a lisp, look at this;&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #BFBDB6; background-color: #0D1017;&quot;&gt;&lt;code data-lang=&quot;python&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FFB454;&quot;&gt;Σ&lt;&#x2F;span&gt;&lt;span&gt;(define&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt; lambda&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt; eq&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt; a&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;b&lt;&#x2F;span&gt;&lt;span&gt; : a&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt;==&lt;&#x2F;span&gt;&lt;span&gt;b)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FFB454;&quot;&gt;Σ&lt;&#x2F;span&gt;&lt;span&gt;(define&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt; lambda&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt; cons&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt; a&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;b&lt;&#x2F;span&gt;&lt;span&gt; :&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FFB454;&quot;&gt; Pair&lt;&#x2F;span&gt;&lt;span&gt;(a&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span&gt;b))&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FFB454;&quot;&gt;Σ&lt;&#x2F;span&gt;&lt;span&gt;(define&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt; lambda&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt; car&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt; p&lt;&#x2F;span&gt;&lt;span&gt; : p[&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;0&lt;&#x2F;span&gt;&lt;span&gt;])&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FFB454;&quot;&gt;Σ&lt;&#x2F;span&gt;&lt;span&gt;(define&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt; lambda&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt; cdr&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt; p&lt;&#x2F;span&gt;&lt;span&gt; : p[&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;1&lt;&#x2F;span&gt;&lt;span&gt;])&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FFB454;&quot;&gt;Σ&lt;&#x2F;span&gt;&lt;span&gt;(define&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt; lambda&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt; add&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt; *&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;num&lt;&#x2F;span&gt;&lt;span&gt; :&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FFB454;&quot;&gt; Σ&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F07178;&quot;&gt;sum&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span&gt; num) )&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;Cool isn&#x27;t it?&lt;&#x2F;p&gt;
&lt;p&gt;Now we can call &lt;code&gt;Σ(eq, 10, 20)&lt;&#x2F;code&gt; and it&#x27;ll evaluate to &lt;code&gt;False&lt;&#x2F;code&gt;, it supports variadic args and anything a regular python lambda supports.&lt;&#x2F;p&gt;
&lt;p&gt;For the next bit we need to use a little hack, python sadly isn&#x27;t lazy evaluated (well, &lt;a href=&quot;#lazy-eval&quot;&gt;it kinda is&lt;&#x2F;a&gt;), so we need to create an &lt;code&gt;if&lt;&#x2F;code&gt; that takes both branches as functions that take no arguments, aka thunks.&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #BFBDB6; background-color: #0D1017;&quot;&gt;&lt;code data-lang=&quot;python&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FFB454;&quot;&gt;Σ&lt;&#x2F;span&gt;&lt;span&gt;(define&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt; lambda&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt; IF&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt; cond&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt; true&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt; false&lt;&#x2F;span&gt;&lt;span&gt; :&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FFB454;&quot;&gt;	Σ&lt;&#x2F;span&gt;&lt;span&gt;([false&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span&gt;true][&lt;&#x2F;span&gt;&lt;span style=&quot;color: #39BAE6;&quot;&gt;bool&lt;&#x2F;span&gt;&lt;span&gt;(cond)]))&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;This does make writing ifs a little more cumbersome but it&#x27;s worth it so far, we can see it in action by defining list functions&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #BFBDB6; background-color: #0D1017;&quot;&gt;&lt;code data-lang=&quot;python&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FFB454;&quot;&gt;Σ&lt;&#x2F;span&gt;&lt;span&gt;(define&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt; lambda&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt; list&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt; *&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;ar&lt;&#x2F;span&gt;&lt;span&gt; :&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FFB454;&quot;&gt;	Σ&lt;&#x2F;span&gt;&lt;span&gt;(cons&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FFB454;&quot;&gt; Σ&lt;&#x2F;span&gt;&lt;span&gt;(car&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span&gt; ar)&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FFB454;&quot;&gt;		Σ&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #95E6CB;&quot;&gt;IF&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FFB454;&quot;&gt; Σ&lt;&#x2F;span&gt;&lt;span&gt;(eq&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt; 1&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FFB454;&quot;&gt; Σ&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F07178;&quot;&gt;len&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span&gt; ar))&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;			lambda&lt;&#x2F;span&gt;&lt;span&gt;: ()&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;			lambda&lt;&#x2F;span&gt;&lt;span&gt;:&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FFB454;&quot;&gt; Σ&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #39BAE6;&quot;&gt;list&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt; *&lt;&#x2F;span&gt;&lt;span&gt;ar[&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;1&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;:&lt;&#x2F;span&gt;&lt;span&gt;]))))&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FFB454;&quot;&gt;Σ&lt;&#x2F;span&gt;&lt;span&gt;(define&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt; lambda&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt; map&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt; fn&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt; ls&lt;&#x2F;span&gt;&lt;span&gt; :&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FFB454;&quot;&gt;	Σ&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #95E6CB;&quot;&gt;IF&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FFB454;&quot;&gt; Σ&lt;&#x2F;span&gt;&lt;span&gt;(eq&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span&gt; ls&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span&gt; ())&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;		lambda&lt;&#x2F;span&gt;&lt;span&gt;: ()&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;		lambda&lt;&#x2F;span&gt;&lt;span&gt;:&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FFB454;&quot;&gt; Σ&lt;&#x2F;span&gt;&lt;span&gt;(cons&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FFB454;&quot;&gt;			Σ&lt;&#x2F;span&gt;&lt;span&gt;(fn&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FFB454;&quot;&gt;Σ&lt;&#x2F;span&gt;&lt;span&gt;(car&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span&gt;ls))&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FFB454;&quot;&gt;			Σ&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F07178;&quot;&gt;map&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span&gt;fn&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FFB454;&quot;&gt;Σ&lt;&#x2F;span&gt;&lt;span&gt;(cdr&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span&gt;ls)))))&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;You can keep iterating over that and build arbitrary python programs in lisp style with that, but not arbitrary lisp programs sadly.
That is because, as you saw with the if, python is eager to evaluate the values of everything it sees, and while you can save stuff in thunks, that just means writing more and more boilerplate LoC for no reason, that also makes writing macros very hard because you need to mess with the internals of the thunk (a function object) instead of just handling the code as data.&lt;&#x2F;p&gt;
&lt;p&gt;What we need is to get rid of python&#x27;s early evaluation entirely, we want to define our own evaluator and call it only when we want, but we can&#x27;t really do much terms of new data types in our current system because that would make this implementing lisp in python rather than python being already a lisp, to do what we want we need a special &lt;strong&gt;type&lt;&#x2F;strong&gt; of data&#x2F;code definition scheme, and it has to be builtin.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;lazy-eval&quot;&gt;Lazy Evaluation&lt;&#x2F;h2&gt;
&lt;p&gt;Earlier I said python isn&#x27;t lazy evaluated and you need to manually put lambdas if you want to defer evaluation, that isn&#x27;t quite true, there are many ways of doing lazy evaluation in python, the official way of doing it is with generators but that is boring, a little known way I like quite a bit is using the &lt;code&gt;type&lt;&#x2F;code&gt; keyword;&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #BFBDB6; background-color: #0D1017;&quot;&gt;&lt;code data-lang=&quot;python&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #39BAE6;&quot;&gt;type&lt;&#x2F;span&gt;&lt;span&gt; a&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F07178;&quot;&gt; print&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt;&amp;quot;hello&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #39BAE6;&quot;&gt;type&lt;&#x2F;span&gt;&lt;span&gt; b&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F07178;&quot;&gt; print&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt;&amp;quot;goodbye&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;[a&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span&gt;b][&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;1&lt;&#x2F;span&gt;&lt;span&gt;]&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FFB454;&quot;&gt;evaluate_value&lt;&#x2F;span&gt;&lt;span&gt;()&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;That will only print &lt;code&gt;&quot;goodbye&quot;&lt;&#x2F;code&gt;, because a maps to &lt;code&gt;print(&quot;hello&quot;)&lt;&#x2F;code&gt; not to the result given by &lt;code&gt;print(&quot;hello&quot;)&lt;&#x2F;code&gt;, which only after evaluating the function python knows it is &lt;code&gt;None&lt;&#x2F;code&gt;&lt;&#x2F;p&gt;
&lt;p&gt;why do I like this method you ask?
Just look&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #BFBDB6; background-color: #0D1017;&quot;&gt;&lt;code data-lang=&quot;python&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #39BAE6;&quot;&gt;type&lt;&#x2F;span&gt;&lt;span&gt; car[_]&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span style=&quot;color: #95E6CB;&quot;&gt; ...&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #39BAE6;&quot;&gt;type&lt;&#x2F;span&gt;&lt;span&gt; cdr[_]&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span&gt; peanut&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #39BAE6;&quot;&gt;type&lt;&#x2F;span&gt;&lt;span&gt; list[_]&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F07178;&quot;&gt; quit&lt;&#x2F;span&gt;&lt;span&gt;()&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F07178;&quot;&gt;print&lt;&#x2F;span&gt;&lt;span&gt;(car[cdr[cdr[list[&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;0&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;1&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;2&lt;&#x2F;span&gt;&lt;span&gt;]]]])&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;That prints &lt;code&gt;car[cdr[cdr[list[0, 1, 2]]]]&lt;&#x2F;code&gt;, had I not used types this would&#x27;ve stopped long before reaching the print, but typing in python is lazy, it&#x27;s not evaluating anything, this allows us to compose and modify code as data just like we wanted, because type objects are just a collection of fancy tuples with more types inside.&lt;&#x2F;p&gt;
&lt;p&gt;And besides defining the types themselves there is no need for new syntax clutter, only repurposing &lt;code&gt;foo[]&lt;&#x2F;code&gt; to work similar to &lt;code&gt;foo()&lt;&#x2F;code&gt;.&lt;&#x2F;p&gt;
&lt;p&gt;Now we want to actually evaluate what they have inside, and not only evaluate but pass arguments to it, you might be tempted to do something like this:&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #BFBDB6; background-color: #0D1017;&quot;&gt;&lt;code data-lang=&quot;python&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #39BAE6;&quot;&gt;type&lt;&#x2F;span&gt;&lt;span&gt; A[foo&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span&gt;bar]&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F07178;&quot;&gt; print&lt;&#x2F;span&gt;&lt;span&gt;(foo&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span&gt; bar)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;A[&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;10&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;20&lt;&#x2F;span&gt;&lt;span&gt;]&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;.&lt;&#x2F;span&gt;&lt;span&gt;__value__&lt;&#x2F;span&gt;&lt;span style=&quot;color: #5A6673;font-style: italic;&quot;&gt; #__value__ is the same as .evaluate_value()&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;And this will print, as expected: &lt;code&gt;foo bar&lt;&#x2F;code&gt;... Not quite what we want, as a matter of fact, the &quot;arguments&quot; you define inside the type are not actually mapped to the ones you passed to A, because they&#x27;re not arguments to begin with, they&#x27;re just a template.&lt;&#x2F;p&gt;
&lt;aside&gt;&lt;details&gt;&lt;summary class=&quot;o&quot;&gt;&lt;a&gt;Exercise for the reader...&lt;&#x2F;a&gt;&lt;&#x2F;summary&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #BFBDB6; background-color: #0D1017;&quot;&gt;&lt;code data-lang=&quot;python&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #39BAE6;&quot;&gt;type&lt;&#x2F;span&gt;&lt;span&gt; A[B=&lt;&#x2F;span&gt;&lt;span style=&quot;color: #39BAE6;&quot;&gt;int&lt;&#x2F;span&gt;&lt;span&gt;]&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span&gt; list[B]&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;for&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt; 1&lt;&#x2F;span&gt;&lt;span&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;.4&lt;&#x2F;span&gt;&lt;span&gt; do; echo&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D95757;&quot;&gt; `hello!`&lt;&#x2F;span&gt;&lt;span&gt; end&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;Where is the syntax error?&lt;br&#x2F;&gt;
if you said in line 2, then python3.14 (latest release as I&#x27;m writing this) is going to disagree with you.&lt;br&#x2F;&gt;
Python says that the &lt;code&gt;=&lt;&#x2F;code&gt; in &lt;code&gt;type A[B=int]&lt;&#x2F;code&gt; is invalid syntax despite being valid and the canonical way of passing default type vars, furthermore it will then suggest you use &lt;code&gt;==&lt;&#x2F;code&gt; or &lt;code&gt;:=&lt;&#x2F;code&gt;, both make 0 sense in this scenario and they are in fact invalid syntax.&lt;&#x2F;div&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;details&gt;&lt;&#x2F;aside&gt;
&lt;p&gt;What we want is a custom evaluator, one that is going to take the arguments inside the square brackets and apply any arbitrary transformation on them.&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #BFBDB6; background-color: #0D1017;&quot;&gt;&lt;code data-lang=&quot;python&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;β&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt; lambda&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt; T&lt;&#x2F;span&gt;&lt;span&gt;:T&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FFB454;&quot;&gt;__value__&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt;*&lt;&#x2F;span&gt;&lt;span&gt;T&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;.&lt;&#x2F;span&gt;&lt;span&gt;__args__)&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;if&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F07178;&quot;&gt;hasattr&lt;&#x2F;span&gt;&lt;span&gt;(T&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt;&amp;quot;__value__&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;and&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F07178;&quot;&gt; hasattr&lt;&#x2F;span&gt;&lt;span&gt;(T&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt;&amp;quot;__args__&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;))&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;else&lt;&#x2F;span&gt;&lt;span&gt; T&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;That is going to take the value assigned to the type, which we&#x27;re going to define as a function, and it will give it the arguments inside the square brackets, saved in &lt;code&gt;.__args__&lt;&#x2F;code&gt;, this is kinda similar to the evaluator &lt;code&gt;Σ&lt;&#x2F;code&gt; we defined earlier for Sexprs, except in this case the function only receives a single object; either a Type or a literal, the type already contains everything it needs inside, and the literals don&#x27;t transformation, so β acts as the identity &lt;code&gt;β(literal) = literal&lt;&#x2F;code&gt;.&lt;&#x2F;p&gt;
&lt;p&gt;Originally I was using tuples to represent pairs here, but python has a normally nice but in this case annoying syntax of interpreting tuples inside of a type argument as the values inside the tuples expanded, so that &lt;code&gt;list[(int,str)]&lt;&#x2F;code&gt; is equivalent to &lt;code&gt;list[int,str]&lt;&#x2F;code&gt;, that allows us to have things like this &lt;code&gt;lambda *v: list[tuple(map(type, v))]&lt;&#x2F;code&gt; to programatically create types for things whose actual type we don&#x27;t yet know. What is that useful for I don&#x27;t know, but no linter should EVER execute code stored in a type, I&#x27;ll just blindly trust none does.&lt;&#x2F;p&gt;
&lt;p&gt;As such we need now a Pair class and an exhaust evaluator, since, as you can see, our &lt;code&gt;β&lt;&#x2F;code&gt; only advances a singular step each time, so evaluating nested expressions will just yield the second unevaluated expression, for the pair we could use lists but I want something immutable and tuples are not great to pass as type arguments, so a custom class it is.&lt;&#x2F;p&gt;
&lt;p&gt;We also want to update our &lt;code&gt;β&lt;&#x2F;code&gt; so that it steps each element of the &lt;code&gt;Cons&lt;&#x2F;code&gt;, otherwise lists which are just chains of pairs will get stuck forever at the fist step of evaluation.&lt;&#x2F;p&gt;
&lt;p&gt;Our program would look now like this:&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #BFBDB6; background-color: #0D1017;&quot;&gt;&lt;code data-lang=&quot;python&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;class&lt;&#x2F;span&gt;&lt;span style=&quot;color: #59C2FF;&quot;&gt;  Cons&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #39BAE6;&quot;&gt;metaclass&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color: #39BAE6;&quot;&gt;type&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt;&amp;quot;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #39BAE6;&quot;&gt;type&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span&gt;{&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt;&amp;quot;__str__&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;:&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;lambda&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt; _&lt;&#x2F;span&gt;&lt;span&gt;:&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt;&amp;quot;NULL&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;})):&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;	__slots__&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span&gt; __match_args__&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt; &amp;quot;a&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt;&amp;quot;b&amp;quot;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;	def&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F07178;&quot;&gt; __init__&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;self&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt; a&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt; b&lt;&#x2F;span&gt;&lt;span&gt;):&lt;&#x2F;span&gt;&lt;span style=&quot;color: #39BAE6;font-style: italic;&quot;&gt; self&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;.&lt;&#x2F;span&gt;&lt;span&gt;a&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #39BAE6;font-style: italic;&quot;&gt;self&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;.&lt;&#x2F;span&gt;&lt;span&gt;b&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span&gt; a&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span&gt;b&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;	def&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F07178;&quot;&gt; __eq__&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;self&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt; o&lt;&#x2F;span&gt;&lt;span&gt;):&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt; return&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F07178;&quot;&gt; isinstance&lt;&#x2F;span&gt;&lt;span&gt;(o&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span&gt;Cons)&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt; and&lt;&#x2F;span&gt;&lt;span style=&quot;color: #39BAE6;font-style: italic;&quot;&gt; self&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;.&lt;&#x2F;span&gt;&lt;span&gt;a&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt;==&lt;&#x2F;span&gt;&lt;span&gt;o&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;.&lt;&#x2F;span&gt;&lt;span&gt;a&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt; and&lt;&#x2F;span&gt;&lt;span style=&quot;color: #39BAE6;font-style: italic;&quot;&gt; self&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;.&lt;&#x2F;span&gt;&lt;span&gt;b&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt;==&lt;&#x2F;span&gt;&lt;span&gt;o&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;.&lt;&#x2F;span&gt;&lt;span&gt;b&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;	def&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F07178;&quot;&gt; __hash__&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;self&lt;&#x2F;span&gt;&lt;span&gt;):&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt; return&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F07178;&quot;&gt; hash&lt;&#x2F;span&gt;&lt;span&gt;((&lt;&#x2F;span&gt;&lt;span style=&quot;color: #39BAE6;font-style: italic;&quot;&gt;self&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;.&lt;&#x2F;span&gt;&lt;span&gt;a&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #39BAE6;font-style: italic;&quot;&gt; self&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;.&lt;&#x2F;span&gt;&lt;span&gt;b))&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;	def&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F07178;&quot;&gt; __repr__&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;self&lt;&#x2F;span&gt;&lt;span&gt;):&lt;&#x2F;span&gt;&lt;span style=&quot;color: #5A6673;font-style: italic;&quot;&gt;#we&amp;#39;ll use the class itself as NULL&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;		return f&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt;&amp;quot;&amp;lt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #95E6CB;&quot;&gt;{&lt;&#x2F;span&gt;&lt;span style=&quot;color: #39BAE6;font-style: italic;&quot;&gt;self&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;.&lt;&#x2F;span&gt;&lt;span&gt;a&lt;&#x2F;span&gt;&lt;span style=&quot;color: #95E6CB;&quot;&gt;} {&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt;&amp;quot;&#x2F;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;if&lt;&#x2F;span&gt;&lt;span style=&quot;color: #39BAE6;font-style: italic;&quot;&gt; self&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;.&lt;&#x2F;span&gt;&lt;span&gt;b&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt; is&lt;&#x2F;span&gt;&lt;span&gt; Cons&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt; else&lt;&#x2F;span&gt;&lt;span style=&quot;color: #39BAE6;font-style: italic;&quot;&gt; self&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;.&lt;&#x2F;span&gt;&lt;span&gt;b&lt;&#x2F;span&gt;&lt;span style=&quot;color: #95E6CB;&quot;&gt;}&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt;&amp;gt;&amp;quot;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;	def&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F07178;&quot;&gt; __iter__&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;self&lt;&#x2F;span&gt;&lt;span&gt;):&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;yield from&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #39BAE6;font-style: italic;&quot;&gt;self&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;.&lt;&#x2F;span&gt;&lt;span&gt;a&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #39BAE6;font-style: italic;&quot;&gt; self&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;.&lt;&#x2F;span&gt;&lt;span&gt;b)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;β&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt; lambda&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt; T&lt;&#x2F;span&gt;&lt;span&gt;:&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FFB454;&quot;&gt; Cons&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FFB454;&quot;&gt;β&lt;&#x2F;span&gt;&lt;span&gt;(T&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;.&lt;&#x2F;span&gt;&lt;span&gt;a)&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FFB454;&quot;&gt;β&lt;&#x2F;span&gt;&lt;span&gt;(T&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;.&lt;&#x2F;span&gt;&lt;span&gt;b))&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;if&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F07178;&quot;&gt; isinstance&lt;&#x2F;span&gt;&lt;span&gt;(T&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span&gt;Cons)&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt; else&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;\&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;	T&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FFB454;&quot;&gt;__value__&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt;*&lt;&#x2F;span&gt;&lt;span&gt;T&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;.&lt;&#x2F;span&gt;&lt;span&gt;__args__)&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;if&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F07178;&quot;&gt;hasattr&lt;&#x2F;span&gt;&lt;span&gt;(T&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt;&amp;quot;__value__&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;and&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F07178;&quot;&gt; hasattr&lt;&#x2F;span&gt;&lt;span&gt;(T&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt;&amp;quot;__args__&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;))&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;else&lt;&#x2F;span&gt;&lt;span&gt; T&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;λ&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt; lambda&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt; v&lt;&#x2F;span&gt;&lt;span&gt;: (&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;lambda&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt; b&lt;&#x2F;span&gt;&lt;span&gt;:&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FFB454;&quot;&gt;λ&lt;&#x2F;span&gt;&lt;span&gt;(b)&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;if&lt;&#x2F;span&gt;&lt;span&gt; b&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt;!=&lt;&#x2F;span&gt;&lt;span&gt;v&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt; else&lt;&#x2F;span&gt;&lt;span&gt; v)(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FFB454;&quot;&gt;β&lt;&#x2F;span&gt;&lt;span&gt;(v))&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;That Cons looks comparatively big but most of it is just pretty printing it&#x27;s content when you do &lt;code&gt;print(Cons(foo, Cons(bar, Cons)))&lt;&#x2F;code&gt;, like I said before, you can even use normal lists if you want but they will look ugly and be unperformant, the &lt;code&gt;__eq__&lt;&#x2F;code&gt; dunder however is required otherwise &lt;code&gt;λ&lt;&#x2F;code&gt; will recur forever.&lt;&#x2F;p&gt;
&lt;p&gt;With that done, we can just define a function as&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #BFBDB6; background-color: #0D1017;&quot;&gt;&lt;code data-lang=&quot;python&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #39BAE6;&quot;&gt;type&lt;&#x2F;span&gt;&lt;span style=&quot;color: #95E6CB;&quot;&gt; FOO&lt;&#x2F;span&gt;&lt;span&gt;[_]&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt; lambda&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt; arg1&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt; arg2&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt; argn&lt;&#x2F;span&gt;&lt;span&gt;: Value&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;But having a define function instead of a statement is more convenient in the long run, since we won&#x27;t have to worry about python statement rules, so we&#x27;ll define a new define anyways, this time we will make a &lt;code&gt;LAMBDA&lt;&#x2F;code&gt; too, and a &lt;code&gt;SET&lt;&#x2F;code&gt; just for convenience while we&#x27;re at it.&lt;&#x2F;p&gt;
&lt;p&gt;They will be almost the same as the previous &lt;code&gt;define&lt;&#x2F;code&gt; function in the &lt;code&gt;Σ&lt;&#x2F;code&gt; version except it will create types instead of python&#x27;s lambdas.&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #BFBDB6; background-color: #0D1017;&quot;&gt;&lt;code data-lang=&quot;python&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;def&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FFB454;&quot;&gt; LAMBDA&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;lamb&lt;&#x2F;span&gt;&lt;span&gt;):&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #39BAE6;&quot;&gt;	type&lt;&#x2F;span&gt;&lt;span&gt; L[l]&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span&gt; lamb&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;	return&lt;&#x2F;span&gt;&lt;span&gt; L&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;def&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FFB454;&quot;&gt; DEFINE&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;lamb&lt;&#x2F;span&gt;&lt;span&gt;):&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #39BAE6;&quot;&gt;	type&lt;&#x2F;span&gt;&lt;span&gt; F[l]&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt; lambda&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt;*&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;arg&lt;&#x2F;span&gt;&lt;span&gt;:&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FFB454;&quot;&gt; lamb&lt;&#x2F;span&gt;&lt;span&gt;(F&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt;*&lt;&#x2F;span&gt;&lt;span&gt;arg)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F07178;&quot;&gt;	globals&lt;&#x2F;span&gt;&lt;span&gt;()[lamb&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;.&lt;&#x2F;span&gt;&lt;span&gt;__code__&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;.&lt;&#x2F;span&gt;&lt;span&gt;co_varnames[&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;0&lt;&#x2F;span&gt;&lt;span&gt;]]&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span&gt;F&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;def&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FFB454;&quot;&gt; SET&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;lamb&lt;&#x2F;span&gt;&lt;span&gt;):&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F07178;&quot;&gt;	globals&lt;&#x2F;span&gt;&lt;span&gt;()[lamb&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;.&lt;&#x2F;span&gt;&lt;span&gt;__code__&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;.&lt;&#x2F;span&gt;&lt;span&gt;co_varnames[&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;0&lt;&#x2F;span&gt;&lt;span&gt;]]&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FFB454;&quot;&gt;lamb&lt;&#x2F;span&gt;&lt;span&gt;(lamb)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;As you can see &lt;code&gt;DEFINE&lt;&#x2F;code&gt; is merely a lambda that has been given a name, and it receives itself as first argument so it can recur over it&#x27;s own name, it is functionally identical to &lt;code&gt;SET(lambda name: LAMBDA(lambda args: result))&lt;&#x2F;code&gt;.&lt;&#x2F;p&gt;
&lt;p&gt;You don&#x27;t actually need to call and edit &lt;code&gt;globals()&lt;&#x2F;code&gt; at all if you don&#x27;t want to, if you pass the lambda to a &lt;mark title=&quot;Basically you name the function by passing it to another function that has it as a named argument, because you can refer to x by name inside f(x) = ...&quot;&gt;Y-combinator&lt;&#x2F;mark&gt; you can recur over an anonymous function just like you can do over a globally defined one, but we have no real reason to concern ourselves with such level of functional purity considering we&#x27;re using python and we only have a limited amount of recursion before the system shits the bed, you still can if you want tho.&lt;&#x2F;p&gt;
&lt;p&gt;And that is all we need, a program is defined as anything inside a &lt;code&gt;λ( )&lt;&#x2F;code&gt;, we&#x27;ll just iterate over a list of expressions to get a complete &quot;useful&quot; program:&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #BFBDB6; background-color: #0D1017;&quot;&gt;&lt;code data-lang=&quot;python&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #5A6673;font-style: italic;&quot;&gt;# Builtins, for now only CAR, CDR and PRINT&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #39BAE6;&quot;&gt;type&lt;&#x2F;span&gt;&lt;span style=&quot;color: #95E6CB;&quot;&gt; CAR&lt;&#x2F;span&gt;&lt;span&gt;[_]&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt; lambda&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt; cons&lt;&#x2F;span&gt;&lt;span&gt;:&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FFB454;&quot;&gt;β&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FFB454;&quot;&gt;β&lt;&#x2F;span&gt;&lt;span&gt;(cons)&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;.&lt;&#x2F;span&gt;&lt;span&gt;a)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #39BAE6;&quot;&gt;type&lt;&#x2F;span&gt;&lt;span style=&quot;color: #95E6CB;&quot;&gt; CDR&lt;&#x2F;span&gt;&lt;span&gt;[_]&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt; lambda&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt; cons&lt;&#x2F;span&gt;&lt;span&gt;:&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FFB454;&quot;&gt;β&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FFB454;&quot;&gt;β&lt;&#x2F;span&gt;&lt;span&gt;(cons)&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;.&lt;&#x2F;span&gt;&lt;span&gt;b)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #39BAE6;&quot;&gt;type&lt;&#x2F;span&gt;&lt;span style=&quot;color: #95E6CB;&quot;&gt; PRINT&lt;&#x2F;span&gt;&lt;span&gt;[&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt;*&lt;&#x2F;span&gt;&lt;span&gt;_]&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt; lambda&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt; *&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;s&lt;&#x2F;span&gt;&lt;span&gt;:&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F07178;&quot;&gt;print&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt;*&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F07178;&quot;&gt;map&lt;&#x2F;span&gt;&lt;span&gt;(λ&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span&gt;s))&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;for&lt;&#x2F;span&gt;&lt;span&gt; i&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt; in&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #5A6673;font-style: italic;&quot;&gt;# Our program starts here&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FFB454;&quot;&gt;DEFINE&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;lambda&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt; IF&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt; cond&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt; true&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt; false&lt;&#x2F;span&gt;&lt;span&gt;: true&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt; if&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FFB454;&quot;&gt; λ&lt;&#x2F;span&gt;&lt;span&gt;(cond)&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;else&lt;&#x2F;span&gt;&lt;span&gt; false)&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FFB454;&quot;&gt;DEFINE&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;lambda&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt; FROM&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt; start&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt; step&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;1&lt;&#x2F;span&gt;&lt;span&gt;:&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FFB454;&quot;&gt; Cons&lt;&#x2F;span&gt;&lt;span&gt;(start&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #95E6CB;&quot;&gt; FROM&lt;&#x2F;span&gt;&lt;span&gt;[start&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt;+&lt;&#x2F;span&gt;&lt;span&gt;step&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span&gt; step]))&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FFB454;&quot;&gt;DEFINE&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;lambda&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt; TAKE&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt; n&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;of&lt;&#x2F;span&gt;&lt;span&gt;:(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;lambda&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt; en&lt;&#x2F;span&gt;&lt;span&gt;:&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FFB454;&quot;&gt;β&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #95E6CB;&quot;&gt;IF&lt;&#x2F;span&gt;&lt;span&gt;[en&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt;&amp;lt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;0&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span&gt;Cons&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FFB454;&quot;&gt;Cons&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FFB454;&quot;&gt;λ&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #95E6CB;&quot;&gt;CAR&lt;&#x2F;span&gt;&lt;span&gt;[of])&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #95E6CB;&quot;&gt;TAKE&lt;&#x2F;span&gt;&lt;span&gt;[en&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt;-&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;1&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #95E6CB;&quot;&gt;CDR&lt;&#x2F;span&gt;&lt;span&gt;[of]])]))(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FFB454;&quot;&gt;λ&lt;&#x2F;span&gt;&lt;span&gt;(n)))&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #95E6CB;&quot;&gt;PRINT&lt;&#x2F;span&gt;&lt;span&gt;[&lt;&#x2F;span&gt;&lt;span style=&quot;color: #95E6CB;&quot;&gt;TAKE&lt;&#x2F;span&gt;&lt;span&gt;[&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;10&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #95E6CB;&quot;&gt; FROM&lt;&#x2F;span&gt;&lt;span&gt;[&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;4&lt;&#x2F;span&gt;&lt;span&gt;]]]&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;:&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FFB454;&quot;&gt;λ&lt;&#x2F;span&gt;&lt;span&gt;(i)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;That will print &lt;code&gt;&amp;lt;4 &amp;lt;5 &amp;lt;6 &amp;lt;7 &amp;lt;8 &amp;lt;9 &amp;lt;10 &amp;lt;11 &amp;lt;12 &amp;lt;13 &#x2F;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&lt;&#x2F;code&gt; exactly what we wanted&lt;&#x2F;p&gt;
&lt;p&gt;Let&#x27;s go over the code step by step.&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #BFBDB6; background-color: #0D1017;&quot;&gt;&lt;code data-lang=&quot;python&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FFB454;&quot;&gt;DEFINE&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;lambda&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt; IF&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt; cond&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt; true&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt; false&lt;&#x2F;span&gt;&lt;span&gt;: true&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt; if&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FFB454;&quot;&gt; λ&lt;&#x2F;span&gt;&lt;span&gt;(cond)&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;else&lt;&#x2F;span&gt;&lt;span&gt; false)&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;A fully lazy IF, no need for any thunk boilerplate, it will receive a condition &lt;strong&gt;expression&lt;&#x2F;strong&gt; and 2 code &lt;strong&gt;expression&lt;&#x2F;strong&gt;S, then it will exhaust the condition till it starts returning literals, and only then it will return the unevaluated &lt;strong&gt;expression&lt;&#x2F;strong&gt; that the condition dictates, this means I actually lied above, our &lt;code&gt;type FOO[_] = lambda: BAR&lt;&#x2F;code&gt; is not actually equivalent to a lisp function, but rather it is a lisp macro, a &lt;mark title=&quot;in our language at least&quot;&gt;function&lt;&#x2F;mark&gt; as a mater of fact is just a macro where you evaluate the expression you handled, like the &lt;code&gt;PRINT&lt;&#x2F;code&gt;, &lt;code&gt;CAR&lt;&#x2F;code&gt; and &lt;code&gt;CDR&lt;&#x2F;code&gt; in the stdlib.&lt;&#x2F;p&gt;
&lt;p&gt;Most of the time you want to use the regular ternary inside rather than the &lt;code&gt;IF&lt;&#x2F;code&gt; macro, because it is too lazy for most usecases, but you might need it if you want to defer the evaluation of the condition till the very last moment.&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #BFBDB6; background-color: #0D1017;&quot;&gt;&lt;code data-lang=&quot;python&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FFB454;&quot;&gt;DEFINE&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;lambda&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt; FROM&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt; start&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt; step&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;1&lt;&#x2F;span&gt;&lt;span&gt;:&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FFB454;&quot;&gt; Cons&lt;&#x2F;span&gt;&lt;span&gt;(start&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #95E6CB;&quot;&gt; FROM&lt;&#x2F;span&gt;&lt;span&gt;[start&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt;+&lt;&#x2F;span&gt;&lt;span&gt;step&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span&gt; step]))&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;This is a macro too, it will give us an infinite stream of numbers starting from &lt;code&gt;start&lt;&#x2F;code&gt;, it does so by returning a pair with &lt;code&gt;(Value NextStep)&lt;&#x2F;code&gt; where &lt;em&gt;Value&lt;&#x2F;em&gt; is a &lt;mark title=&quot;if you give it a number of course, but anything with an .__add__() dunder will do&quot;&gt;literal&lt;&#x2F;mark&gt; and &lt;em&gt;NextStep&lt;&#x2F;em&gt; is an unevaluated &lt;strong&gt;expression&lt;&#x2F;strong&gt; that goes &lt;code&gt;FROM&lt;&#x2F;code&gt; one step further.&lt;&#x2F;p&gt;
&lt;p&gt;Since &lt;code&gt;β()&lt;&#x2F;code&gt; evaluating a &lt;code&gt;Cons&lt;&#x2F;code&gt; will evaluate both sides sequentially, something like &lt;code&gt;FROM[1]&lt;&#x2F;code&gt; would produce &lt;code&gt;(1 _)&lt;&#x2F;code&gt;  on the first step, the second time it is evaluated it will produce &lt;code&gt;(1 (2 _))&lt;&#x2F;code&gt;, the third time &lt;code&gt;(1 (2 (3 _)))&lt;&#x2F;code&gt; and so on. Doing an exhaust evaluation &lt;code&gt;λ(FROM[1])&lt;&#x2F;code&gt; will just recur infinitely, and thus &lt;code&gt;PRINT[FROM[1]]&lt;&#x2F;code&gt; would never finish since it internally exhausts it&#x27;s arguments, despite that our program does not halt, because we can handle unevaluated pieces of code as regular data.&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #BFBDB6; background-color: #0D1017;&quot;&gt;&lt;code data-lang=&quot;python&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FFB454;&quot;&gt;DEFINE&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;lambda&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt; TAKE&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt; n&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;of&lt;&#x2F;span&gt;&lt;span&gt;:(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;lambda&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt; en&lt;&#x2F;span&gt;&lt;span&gt;:&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FFB454;&quot;&gt;β&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #95E6CB;&quot;&gt;IF&lt;&#x2F;span&gt;&lt;span&gt;[en&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt;&amp;lt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;0&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span&gt;Cons&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FFB454;&quot;&gt;Cons&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FFB454;&quot;&gt;λ&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #95E6CB;&quot;&gt;CAR&lt;&#x2F;span&gt;&lt;span&gt;[of])&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #95E6CB;&quot;&gt;TAKE&lt;&#x2F;span&gt;&lt;span&gt;[en&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt;-&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;1&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #95E6CB;&quot;&gt;CDR&lt;&#x2F;span&gt;&lt;span&gt;[of]])]))(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FFB454;&quot;&gt;λ&lt;&#x2F;span&gt;&lt;span&gt;(n)))&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;This one is far more interesting, it takes a an &lt;strong&gt;expression&lt;&#x2F;strong&gt; that generates a number and a &lt;mark title=&quot;A lisp list or something that generates it, notice we haven&#x27;t even defined lists but we already have and can use them&quot;&gt;chain&lt;&#x2F;mark&gt;, then it we use &lt;mark title=&quot;Instead of setting a variable, we create a function that uses it&#x27;s value, and then call it with the evaluated value&quot;&gt;Currying&lt;&#x2F;mark&gt; to evaluate &lt;code&gt;n&lt;&#x2F;code&gt; as a number only once, if the number, now evaluated, is 0 or less we return an empty pair, otherwise we return the concatenation of the first value of our &lt;code&gt;of&lt;&#x2F;code&gt; chain, with the &lt;strong&gt;expression&lt;&#x2F;strong&gt; that &lt;code&gt;TAKE&lt;&#x2F;code&gt;s n-1 elements from the rest of the chain.&lt;&#x2F;p&gt;
&lt;p&gt;We are evaluating here because take doesn&#x27;t necessarily needs to take a constant number every time, imagine if we &lt;code&gt;DEFINE(lambda GET: int(input(&quot;Enter a number: &quot;)))&lt;&#x2F;code&gt; and instead of taking 10 we just call &lt;code&gt;TAKE[GET[()], Cons(1,Cons(2,Cons(3,Cons)))]&lt;&#x2F;code&gt;, if we don&#x27;t evaluate it we will soon reach a &lt;code&gt;TypeError&lt;&#x2F;code&gt;, but if we don&#x27;t curry it and just evaluate twice on both places were we are using it the program would&#x27;ve asked twice.&lt;&#x2F;p&gt;
&lt;p&gt;We didn&#x27;t evaluate &lt;code&gt;FROM&lt;&#x2F;code&gt;&#x27;s arguments because those are part of what the caller requests, but here &lt;code&gt;n&lt;&#x2F;code&gt; is our own internal counter variable, in actuality we will evaluate it only once and all the other times we know it&#x27;ll be the literal that results from subtracting 1 to it.&lt;&#x2F;p&gt;
&lt;p&gt;It is a function since we&#x27;re &lt;code&gt;β&lt;&#x2F;code&gt; evaluating it, but the thing we&#x27;re evaluating is an &lt;code&gt;IF&lt;&#x2F;code&gt; that returns an expression anyways, notice that &lt;code&gt;β(IF[...])&lt;&#x2F;code&gt; is the same as doing what &lt;code&gt;IF&lt;&#x2F;code&gt; does internally; a regular python ternary.&lt;&#x2F;p&gt;
&lt;p&gt;And that is pretty much it, you can now write any program you wish, but I recommend doing something like &lt;code&gt;sys.setrecursionlimit(6000000)&lt;&#x2F;code&gt; before running any because python&#x27;s default of 1000 runs out way too fast&lt;&#x2F;p&gt;
&lt;p&gt;Still, there is a lot of room for improvement, I&#x27;ll define some standard functions with the &lt;code&gt;type&lt;&#x2F;code&gt; keyword from now on because they&#x27;re easier to debug.&lt;&#x2F;p&gt;
&lt;p&gt;The first thing that catches my eye is that &lt;code&gt;IF&lt;&#x2F;code&gt; is going to exhaust the condition, which is not good because it wouldn&#x27;t be out of the question passing a stream to it, &lt;code&gt;λ&lt;&#x2F;code&gt; should be using as sparingly as possible, with that in mind we will define a &lt;code&gt;TRUTH&lt;&#x2F;code&gt; function, rewrite the &lt;code&gt;IF&lt;&#x2F;code&gt; macro and make some derived combinators&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #BFBDB6; background-color: #0D1017;&quot;&gt;&lt;code data-lang=&quot;python&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;def&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FFB454;&quot;&gt; isPair&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;p&lt;&#x2F;span&gt;&lt;span&gt;):&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt; return&lt;&#x2F;span&gt;&lt;span&gt; p&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt; is&lt;&#x2F;span&gt;&lt;span&gt; Cons&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt; or&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F07178;&quot;&gt; isinstance&lt;&#x2F;span&gt;&lt;span&gt;(p&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span&gt;Cons)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #39BAE6;&quot;&gt;type&lt;&#x2F;span&gt;&lt;span style=&quot;color: #95E6CB;&quot;&gt; TRUTH&lt;&#x2F;span&gt;&lt;span&gt;[&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt;*&lt;&#x2F;span&gt;&lt;span&gt;_]&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span&gt; (&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;lambda&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt; val&lt;&#x2F;span&gt;&lt;span&gt;:&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;	(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;lambda&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt; v&lt;&#x2F;span&gt;&lt;span&gt;:(v&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt; is not&lt;&#x2F;span&gt;&lt;span&gt; Cons)&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;if&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FFB454;&quot;&gt; isPair&lt;&#x2F;span&gt;&lt;span&gt;(v)&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;else&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #39BAE6;&quot;&gt;bool&lt;&#x2F;span&gt;&lt;span&gt;(v)&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;if&lt;&#x2F;span&gt;&lt;span&gt; v&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt;==&lt;&#x2F;span&gt;&lt;span&gt;val&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt; else&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FFB454;&quot;&gt; β&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #95E6CB;&quot;&gt;TRUTH&lt;&#x2F;span&gt;&lt;span&gt;[v])))(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FFB454;&quot;&gt;β&lt;&#x2F;span&gt;&lt;span&gt;(val))&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #39BAE6;&quot;&gt;type&lt;&#x2F;span&gt;&lt;span style=&quot;color: #95E6CB;&quot;&gt; IF&lt;&#x2F;span&gt;&lt;span&gt;[&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt;*&lt;&#x2F;span&gt;&lt;span&gt;_]&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt; lambda&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt; cond&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;true&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;false&lt;&#x2F;span&gt;&lt;span&gt;:true&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt; if&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FFB454;&quot;&gt; β&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #95E6CB;&quot;&gt;TRUTH&lt;&#x2F;span&gt;&lt;span&gt;[cond])&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;else&lt;&#x2F;span&gt;&lt;span&gt; false&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #39BAE6;&quot;&gt;type&lt;&#x2F;span&gt;&lt;span style=&quot;color: #95E6CB;&quot;&gt; COND&lt;&#x2F;span&gt;&lt;span&gt;[&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt;*&lt;&#x2F;span&gt;&lt;span&gt;_]&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span&gt; (&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;lambda&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt; *&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;pairs&lt;&#x2F;span&gt;&lt;span&gt;:&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;	(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;lambda&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt; cond&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;val&lt;&#x2F;span&gt;&lt;span&gt;:val&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt; if&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FFB454;&quot;&gt; β&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #95E6CB;&quot;&gt;TRUTH&lt;&#x2F;span&gt;&lt;span&gt;[cond])&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;else&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FFB454;&quot;&gt; β&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #95E6CB;&quot;&gt;COND&lt;&#x2F;span&gt;&lt;span&gt;[pairs[&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;1&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;:&lt;&#x2F;span&gt;&lt;span&gt;]]))(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt;*&lt;&#x2F;span&gt;&lt;span&gt;pairs[&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;0&lt;&#x2F;span&gt;&lt;span&gt;]))&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt; if&lt;&#x2F;span&gt;&lt;span&gt; pairs&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt; else&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt; None&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #39BAE6;&quot;&gt;type&lt;&#x2F;span&gt;&lt;span style=&quot;color: #95E6CB;&quot;&gt; NOT&lt;&#x2F;span&gt;&lt;span&gt;[&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt;*&lt;&#x2F;span&gt;&lt;span&gt;_]&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt; lambda&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt; val&lt;&#x2F;span&gt;&lt;span&gt;:&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt;not&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FFB454;&quot;&gt; β&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #95E6CB;&quot;&gt;TRUTH&lt;&#x2F;span&gt;&lt;span&gt;[val])&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;Wish &lt;code&gt;is&lt;&#x2F;code&gt; wasn&#x27;t reserved so I could put that isPair inside &lt;code&gt;Cons.is&lt;&#x2F;code&gt;&lt;&#x2F;p&gt;
&lt;p&gt;Do keep in mind &lt;code&gt;TRUTH&lt;&#x2F;code&gt; evaluates once the code passed to it, so you have to be careful with what you pass to it.&lt;&#x2F;p&gt;
&lt;div style=&quot;min-height:1rem;background:repeating-linear-gradient(45deg,#fc1 0 1em,#000 1em 2em)&quot;&gt;&lt;&#x2F;div&gt;
&lt;p&gt;Anyways, with that done we can now continue with the list functions:&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #BFBDB6; background-color: #0D1017;&quot;&gt;&lt;code data-lang=&quot;python&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;&lt;!-- 

let&#x27;s check out some functions to add to the builtins:

```py
type LIST[_]=lambda *v:Cons if len(v)==0 else Cons(v[0],LIST[v[1:]])

DEFINE(lambda AND,*con: True if not con else λ(con[0])and λ(AND[con[1:]]))
DEFINE(lambda OR,*con: True if not con else λ(con[0])or λ(OR[con[1:]]))
```
There we can see how having that automatic tuple unpacking is actually very useful

```py
DEFINE(lambda REPEAT, val: Cons(val,REPEAT[val]))
DEFINE(lambda DROP, n,of:
	(lambda en:β(IF[en&lt;=0,of,DROP[en-1,CDR[of]]]))(λ(n))
)

DEFINE(lambda RANGE, start,stop,step=1:
	(lambda er=λ(start),eo=λ(stop),ee=λ(step):
		β(TAKE[(eo-er)&#x2F;&#x2F;ee, FROM[er,ee]]))()
)
```

--&gt;
&lt;!-- 

`REPEAT` and `DROP` are very similar to `FROM` and `TAKE`, and `RANGE` is what it&#x27;s name says.
currying is starting to get annoying now, so I moved the values to the lambda definition, it&#x27;s the exact same thing except you have the values above, much like a `let`.

```py
DEFINE(lambda MAP, Fn,Ls:
	β(IF[β(Ls)==Cons, Cons,
		Cons(λ(Fn)[CAR[Ls]],MAP[Fn,CDR[Ls]])
	]))

DEFINE(lambda FILTER, Fn,Ls:
	β(IF[β(Ls)==Cons, Cons,
		β(β(IF[β(Fn[CAR[Ls]]),#first steps the if then the result of the if
			CONS[CAR[Ls], FILTER[Fn,β(CDR[Ls])]], 
			FILTER[Fn,β(CDR[Ls])] #can&#x27;t step FILTER here directly or infinite recursion
		]))
	]))
```
Now these ones are far more interesting, `MAP` is the step eval of the **macro** that decides either an empty Cons or one that returns
--&gt;</content>
	</entry>
</feed>