I put this into TXR Lisp a few weeks ago. Well, not exactly <i>this</i>. Rather, quite simply, <i>any struct</i> can be lazily instantiated with the lnew operator. This gives you the object instance with its identity, but not yet initialized. When you touch it, then all of it materializes. (It&#x27;s not a 
per-slot behavior, in other words.)<p>The commit for this could almost fit on a napkin: <a href="http:&#x2F;&#x2F;www.kylheku.com&#x2F;cgit&#x2F;txr&#x2F;commit&#x2F;?id=eb483eb39fa4570d1178a3f71fb65be908fd0d01" rel="nofollow">http:&#x2F;&#x2F;www.kylheku.com&#x2F;cgit&#x2F;txr&#x2F;commit&#x2F;?id=eb483eb39fa4570d1...</a><p>Circular example: two structs are constructed so they refer to each other, in a single step, by using mlet for the mutual scoping, and lnew for the construction semantics:<p><pre><code>  1&gt; (defstruct node nil left right value)
  #&lt;struct-type node&gt;
  2&gt; (defvar circ (mlet ((a (lnew node left b value 0))
                         (b (lnew node right a value 1)))
                    a))
  circ
  3&gt; circ.value
  0
  4&gt; circ.left.value
  1
  5&gt; circ.left.right.value
  0
</code></pre>
Lazy infinite chain of nodes, each containing a higher count value than its predecessor:<p><pre><code>  1&gt; (defstruct node () next count)
  #&lt;struct-type node&gt;
  2&gt; (defun count-chain (init)
       (lnew node count init next (count-chain (succ init))))
  count-chain
  3&gt; (defvarl x (count-chain 0))
  x
  4&gt; x.count
  0
  5&gt; x.next.count
  1
  6&gt; x.next.next.count
  2
  7&gt; x.next.next.next.count
  3
  8&gt; x.next.next.next.next.count
  4
  9&gt; x.count
  0
  10&gt; x.next.count
  1</code></pre>