<?xml version="1.0"?>
<?xml-stylesheet type="text/css" href="http://wiki.erights.org/mediawiki/skins/common/feed.css?207"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
		<id>http://wiki.erights.org/mediawiki/index.php?action=history&amp;feed=atom&amp;title=User%3AKevin_Reid%2Funification.emaker</id>
		<title>User:Kevin Reid/unification.emaker - Revision history</title>
		<link rel="self" type="application/atom+xml" href="http://wiki.erights.org/mediawiki/index.php?action=history&amp;feed=atom&amp;title=User%3AKevin_Reid%2Funification.emaker"/>
		<link rel="alternate" type="text/html" href="http://wiki.erights.org/mediawiki/index.php?title=User:Kevin_Reid/unification.emaker&amp;action=history"/>
		<updated>2026-06-13T14:11:05Z</updated>
		<subtitle>Revision history for this page on the wiki</subtitle>
		<generator>MediaWiki 1.15.5-7</generator>

	<entry>
		<id>http://wiki.erights.org/mediawiki/index.php?title=User:Kevin_Reid/unification.emaker&amp;diff=2131&amp;oldid=prev</id>
		<title>Kevin Reid at 14:21, 8 March 2011</title>
		<link rel="alternate" type="text/html" href="http://wiki.erights.org/mediawiki/index.php?title=User:Kevin_Reid/unification.emaker&amp;diff=2131&amp;oldid=prev"/>
				<updated>2011-03-08T14:21:59Z</updated>
		
		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;The idea is to implement unification variables in E: a single object which acts as promise and resolver, and a procedure which makes two values equal by resolving variables if possible. I never finished this program.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&amp;lt;nowiki&amp;gt;def makeProxy := &amp;lt;elib:ref.makeProxy&amp;gt;&lt;br /&gt;
def [varResolverSealer, varResolverUnsealer] := &amp;lt;elib:sealing.makeBrand&amp;gt;(&amp;quot;unifiable&amp;quot;)&lt;br /&gt;
def makeVariable() {&lt;br /&gt;
  def resolutionBox&lt;br /&gt;
  def buffer&lt;br /&gt;
  def ref&lt;br /&gt;
  def resolver {&lt;br /&gt;
    to resolve(target) {&lt;br /&gt;
      bind resolutionBox := &amp;amp;target&lt;br /&gt;
      bind buffer := target&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
  def handler {&lt;br /&gt;
    to handleSend(v, a) { return E.send(buffer, v, a) }&lt;br /&gt;
    to handleSendOnly(v, a) { return E.sendOnly(buffer, v, a) }&lt;br /&gt;
    to handleOptSealedDispatch(brand) {&lt;br /&gt;
      if (brand == varResolverSealer.getBrand()) {&lt;br /&gt;
        return varResolverSealer.seal([ref, resolver])&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
  bind ref := makeProxy(handler, resolutionBox, false)&lt;br /&gt;
  return ref&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
def makeSame(a, b) {&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
def _unify(a, b, unifications, sofar) {&lt;br /&gt;
  def ka := __equalizer.makeTraversalKey(a)&lt;br /&gt;
  def kb := __equalizer.makeTraversalKey(b)&lt;br /&gt;
  def k := [ka, kb]&lt;br /&gt;
  if (ka == kb || sofar.maps(k)) {&lt;br /&gt;
    # ok&lt;br /&gt;
  } else if (varResolverUnsealer.amplify(a) =~ [[==a, resolver]]) {&lt;br /&gt;
    unifications.pushfn { resolver.resolve(b) }]&lt;br /&gt;
  } else if (varResolverUnsealer.amplify(b) =~ [[==b, resolver]]) {&lt;br /&gt;
    [fn { resolver.resolve(a) }]&lt;br /&gt;
  } else if (a == b) {&lt;br /&gt;
    []&lt;br /&gt;
  } else if (Ref.isSelfless(a) &amp;amp;&amp;amp; a.__optUncall() =~ [ar, av, aa]) {&lt;br /&gt;
    accum [] ...&lt;br /&gt;
  } else {&lt;br /&gt;
    return Ref.broken(`can't make $a and $b the same`)&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Kevin Reid</name></author>	</entry>

	</feed>