<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	xmlns:georss="http://www.georss.org/georss" xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#" xmlns:media="http://search.yahoo.com/mrss/"
	>

<channel>
	<title>(hello</title>
	<atom:link href="http://prael.wordpress.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://prael.wordpress.com</link>
	<description>'world)</description>
	<lastBuildDate>Mon, 16 Nov 2009 15:53:22 +0000</lastBuildDate>
	<generator>http://wordpress.com/</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<cloud domain='prael.wordpress.com' port='80' path='/?rsscloud=notify' registerProcedure='' protocol='http-post' />
<image>
		<url>http://www.gravatar.com/blavatar/5c2a9baf2a6a2291f40d134d400cef18?s=96&#038;d=http://s.wordpress.com/i/buttonw-com.png</url>
		<title>(hello</title>
		<link>http://prael.wordpress.com</link>
	</image>
			<item>
		<title>Update</title>
		<link>http://prael.wordpress.com/2009/11/16/update/</link>
		<comments>http://prael.wordpress.com/2009/11/16/update/#comments</comments>
		<pubDate>Mon, 16 Nov 2009 15:53:22 +0000</pubDate>
		<dc:creator>prael</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://prael.wordpress.com/2009/11/16/update/</guid>
		<description><![CDATA[Same old shit. Reading a lot about actor systems and languages lately. Google&#8217;s recently announced language, &#8220;Go&#8221;, sounds interesting as well. At first glance it looks to me like a C with GC, functional constructs, a decent package system, and CSP style concurrency. Will have to check it out more later.
Have also been catching myself [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=prael.wordpress.com&blog=2445123&post=111&subd=prael&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p>Same old shit. Reading a lot about actor systems and languages lately. Google&#8217;s recently announced language, &#8220;Go&#8221;, sounds interesting as well. At first glance it looks to me like a C with GC, functional constructs, a decent package system, and CSP style concurrency. Will have to check it out more later.</p>
<p>Have also been catching myself writing lots of little toy language interpreters lately&#8230;</p>
  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/prael.wordpress.com/111/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/prael.wordpress.com/111/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/prael.wordpress.com/111/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/prael.wordpress.com/111/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/prael.wordpress.com/111/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/prael.wordpress.com/111/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/prael.wordpress.com/111/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/prael.wordpress.com/111/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/prael.wordpress.com/111/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/prael.wordpress.com/111/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=prael.wordpress.com&blog=2445123&post=111&subd=prael&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://prael.wordpress.com/2009/11/16/update/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/b856dee5bd9723033ad9895dd3d0f0b1?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">prael</media:title>
		</media:content>
	</item>
		<item>
		<title>Just ordered&#8230;</title>
		<link>http://prael.wordpress.com/2009/10/15/just-ordered/</link>
		<comments>http://prael.wordpress.com/2009/10/15/just-ordered/#comments</comments>
		<pubDate>Thu, 15 Oct 2009 13:14:47 +0000</pubDate>
		<dc:creator>prael</dc:creator>
				<category><![CDATA[Books]]></category>
		<category><![CDATA[Life]]></category>

		<guid isPermaLink="false">http://prael.wordpress.com/?p=109</guid>
		<description><![CDATA[A bunch of books off Amazon. Some classics, some geeky stuff, some that are both. When they get here I&#8217;ll be happy as a baby in a topless bar.
       <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=prael.wordpress.com&blog=2445123&post=109&subd=prael&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p>A bunch of books off Amazon. Some classics, some geeky stuff, some that are both. When they get here I&#8217;ll be happy as a baby in a topless bar.</p>
  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/prael.wordpress.com/109/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/prael.wordpress.com/109/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/prael.wordpress.com/109/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/prael.wordpress.com/109/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/prael.wordpress.com/109/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/prael.wordpress.com/109/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/prael.wordpress.com/109/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/prael.wordpress.com/109/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/prael.wordpress.com/109/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/prael.wordpress.com/109/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=prael.wordpress.com&blog=2445123&post=109&subd=prael&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://prael.wordpress.com/2009/10/15/just-ordered/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/b856dee5bd9723033ad9895dd3d0f0b1?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">prael</media:title>
		</media:content>
	</item>
		<item>
		<title>Unique types and STM?</title>
		<link>http://prael.wordpress.com/2009/08/24/unique-types-and-stm/</link>
		<comments>http://prael.wordpress.com/2009/08/24/unique-types-and-stm/#comments</comments>
		<pubDate>Mon, 24 Aug 2009 17:57:33 +0000</pubDate>
		<dc:creator>prael</dc:creator>
				<category><![CDATA[Programming]]></category>

		<guid isPermaLink="false">http://prael.wordpress.com/?p=107</guid>
		<description><![CDATA[I had an idea at work. 
A given programming language is mostly useful only for masturbation if it cannot support things such as file handles, sockets, pipes, graphics, etc&#8230; but these wreck hell on purely functional languages. Monads conceptually work by passing a data structure representing the world between the functions which must alter it, [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=prael.wordpress.com&blog=2445123&post=107&subd=prael&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p>I had an idea at work. </p>
<p>A given programming language is mostly useful only for masturbation if it cannot support things such as file handles, sockets, pipes, graphics, etc&#8230; but these wreck hell on <a href="http://en.wikipedia.org/wiki/Functional_programming">purely functional</a> languages. Monads conceptually work by passing a data structure representing the world between the functions which must alter it, it is happenstance that it is never the same twice. <a href="http://en.wikipedia.org/wiki/Uniqueness_type">Unique types</a> are a sort of middle ground, a type of data which can only be used once afterwards from which an alternate is derived. Both monads and unique types are syntactically noisier than allowing direct mutation, although Kernel&#8217;s clean support for multiple value returns would greatly simplify the handling of uniques. Scheme and Ocaml &#8220;solve&#8221; it by presuming to be &#8220;mostly&#8221; functional languages and allow mutation of variables (via refs in Ocaml, set! in Scheme). This is the simplest method but breaks referential transparency a whole lot.</p>
<p>So here&#8217;s the question. Why don&#8217;t we make those things unique types, and automagically handle their updating in the background managed by something along the lines of <a href="http://en.wikipedia.org/wiki/Software_transactional_memory">STM</a> or the such as is already done for mutable data (ala Clojure)? </p>
<p>Someone steal this idea and implement it or point me to something which already does something similar, or point out some flaws, or whatever. I think it&#8217;s a neat idea and would like to know if it&#8217;s redundant or for some reason unworkable. </p>
  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/prael.wordpress.com/107/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/prael.wordpress.com/107/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/prael.wordpress.com/107/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/prael.wordpress.com/107/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/prael.wordpress.com/107/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/prael.wordpress.com/107/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/prael.wordpress.com/107/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/prael.wordpress.com/107/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/prael.wordpress.com/107/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/prael.wordpress.com/107/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=prael.wordpress.com&blog=2445123&post=107&subd=prael&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://prael.wordpress.com/2009/08/24/unique-types-and-stm/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/b856dee5bd9723033ad9895dd3d0f0b1?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">prael</media:title>
		</media:content>
	</item>
		<item>
		<title>Phone update.</title>
		<link>http://prael.wordpress.com/2009/07/13/phone-update/</link>
		<comments>http://prael.wordpress.com/2009/07/13/phone-update/#comments</comments>
		<pubDate>Mon, 13 Jul 2009 21:34:10 +0000</pubDate>
		<dc:creator>prael</dc:creator>
				<category><![CDATA[Life]]></category>

		<guid isPermaLink="false">http://prael.wordpress.com/?p=104</guid>
		<description><![CDATA[Their sims aren&#8217;t interchangeable. Might be &#8217;cause the old phone was a Cingular, before AT&#38;T bought Cingular. Oh well. If I ever give enough of a shit, I&#8217;m sure I could find someone with suitable hardware to unlock it.
On the bright &#8230; or totally fucking evil&#8230; side, I was bitching last night over txts about [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=prael.wordpress.com&blog=2445123&post=104&subd=prael&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p>Their sims aren&#8217;t interchangeable. Might be &#8217;cause the old phone was a Cingular, before AT&amp;T bought Cingular. Oh well. If I ever give enough of a shit, I&#8217;m sure I could find someone with suitable hardware to unlock it.</p>
<p>On the bright &#8230; or totally fucking evil&#8230; side, I was bitching last night over txts about the phone&#8217;s constantly popping up &#8220;The last transaction cost you 0.00&#8243; messages with every send/receive, there being no way to get rid of them, and considering getting it unlocked and switching to Verizon or such in the future. Today it seems to have decided of its own accord to nolonger do that. </p>
<p>So either it quits bugging you if the phone&#8217;s actually registered with your own name, they&#8217;ve quit that annoyance on unlimited accounts, or one of my txts got flagged to be read somewhere. </p>
<p>Just sayin&#8217;. All in all, I&#8217;m happy enough with it.</p>
  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/prael.wordpress.com/104/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/prael.wordpress.com/104/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/prael.wordpress.com/104/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/prael.wordpress.com/104/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/prael.wordpress.com/104/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/prael.wordpress.com/104/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/prael.wordpress.com/104/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/prael.wordpress.com/104/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/prael.wordpress.com/104/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/prael.wordpress.com/104/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=prael.wordpress.com&blog=2445123&post=104&subd=prael&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://prael.wordpress.com/2009/07/13/phone-update/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/b856dee5bd9723033ad9895dd3d0f0b1?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">prael</media:title>
		</media:content>
	</item>
		<item>
		<title>Phone fun.</title>
		<link>http://prael.wordpress.com/2009/07/12/phone-fun/</link>
		<comments>http://prael.wordpress.com/2009/07/12/phone-fun/#comments</comments>
		<pubDate>Sun, 12 Jul 2009 19:54:41 +0000</pubDate>
		<dc:creator>prael</dc:creator>
				<category><![CDATA[Life]]></category>

		<guid isPermaLink="false">http://prael.wordpress.com/?p=102</guid>
		<description><![CDATA[Got a Samsung A177 (prepaid AT&#38;T) on the way home from work today. Mostly got it just for text/IM/etc&#8230;, I&#8217;ve already got a different AT&#38;T that I use like hell on nights/weekends, which for various reasons I cannot simply add texting to. If I can, however, I intend to ditch the old phone and just [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=prael.wordpress.com&blog=2445123&post=102&subd=prael&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p>Got a Samsung A177 (prepaid AT&amp;T) on the way home from work today. Mostly got it just for text/IM/etc&#8230;, I&#8217;ve already got a different AT&amp;T that I use like hell on nights/weekends, which for various reasons I cannot simply add texting to. If I can, however, I intend to ditch the old phone and just swap the sims in the A177 as needed. </p>
<p>I&#8217;ve just put it back together (well, I went to add the battery, and the screws were right there&#8230; I had to peek&#8230;) and finished activating it so now I&#8217;m waiting for the $15 credit it comes with to get added to it, after which I&#8217;ll add the $15 card I got as unlim texting is $20. </p>
<p>Once I confirm texting works, I&#8217;ll attempt the sim swapping. </p>
  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/prael.wordpress.com/102/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/prael.wordpress.com/102/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/prael.wordpress.com/102/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/prael.wordpress.com/102/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/prael.wordpress.com/102/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/prael.wordpress.com/102/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/prael.wordpress.com/102/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/prael.wordpress.com/102/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/prael.wordpress.com/102/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/prael.wordpress.com/102/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=prael.wordpress.com&blog=2445123&post=102&subd=prael&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://prael.wordpress.com/2009/07/12/phone-fun/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/b856dee5bd9723033ad9895dd3d0f0b1?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">prael</media:title>
		</media:content>
	</item>
		<item>
		<title>SMOS</title>
		<link>http://prael.wordpress.com/2009/07/06/smos/</link>
		<comments>http://prael.wordpress.com/2009/07/06/smos/#comments</comments>
		<pubDate>Tue, 07 Jul 2009 03:12:38 +0000</pubDate>
		<dc:creator>prael</dc:creator>
				<category><![CDATA[Programming]]></category>
		<category><![CDATA[Scheme]]></category>

		<guid isPermaLink="false">http://prael.wordpress.com/2009/07/06/smos/</guid>
		<description><![CDATA[A quick hack, does what I needed it to do. Namely, manage access to ancestor&#8217;s methods a little more like YASOS. Maybe someone&#8217;ll find it useful.
Perma link for updates and such: http://prael.wordpress.com/smos/

    smos.scm

;;;; smos.scm
;;;; Still Macroless Object System.
;;;; This code is still in the public domain.
;;;; No warrany. In fact, I guarantee [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=prael.wordpress.com&blog=2445123&post=100&subd=prael&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p>A quick hack, does what I needed it to do. Namely, manage access to ancestor&#8217;s methods a little more like YASOS. Maybe someone&#8217;ll find it useful.</p>
<p>Perma link for updates and such: http://prael.wordpress.com/smos/</p>
<p><!-- Created by htmlize-1.36 in css mode. --></p>
<p>    smos.scm</p>
<pre>
<span class="quack-pltish-comment"><span class="quack-threesemi-semi">;;;</span></span><span class="quack-pltish-comment"><span class="quack-threesemi-text">; smos.scm
</span></span><span class="quack-pltish-comment"><span class="quack-threesemi-semi">;;;</span></span><span class="quack-pltish-comment"><span class="quack-threesemi-text">; Still Macroless Object System.
</span></span><span class="quack-pltish-comment"><span class="quack-threesemi-semi">;;;</span></span><span class="quack-pltish-comment"><span class="quack-threesemi-text">; This code is still in the public domain.
</span></span><span class="quack-pltish-comment"><span class="quack-threesemi-semi">;;;</span></span><span class="quack-pltish-comment"><span class="quack-threesemi-text">; No warrany. In fact, I guarantee that even looking at this code will break your shit, leaving you destitute and homeless.
</span></span>
<span class="quack-pltish-comment"><span class="quack-threesemi-semi">;;;</span></span><span class="quack-pltish-comment"><span class="quack-threesemi-text">; 0.0.2
</span></span><span class="quack-pltish-comment"><span class="quack-threesemi-semi">;;;</span></span><span class="quack-pltish-comment"><span class="quack-threesemi-text">; Broke out vector stuff, in case obj's structure changes later.
</span></span><span class="quack-pltish-comment"><span class="quack-threesemi-semi">;;;</span></span><span class="quack-pltish-comment"><span class="quack-threesemi-text">; Somewhat YASOS-ify ancestor handling. Ancestors are now stored in a vector.
</span></span><span class="quack-pltish-comment"><span class="quack-threesemi-semi">;;;</span></span><span class="quack-pltish-comment"><span class="quack-threesemi-text">; (make-method! self some-method (lambda (self) (operate-as self a-number-in-ancestors-vector some-other-method)))
</span></span>
<span class="quack-pltish-comment"><span class="quack-threesemi-semi">;;;</span></span><span class="quack-pltish-comment"><span class="quack-threesemi-text">; 0.0.1
</span></span><span class="quack-pltish-comment"><span class="quack-threesemi-semi">;;;</span></span><span class="quack-pltish-comment"><span class="quack-threesemi-text">; Initial copy of MOS.
</span></span>
<span class="quack-pltish-comment"><span class="quack-threesemi-semi">;;;</span></span><span class="quack-pltish-comment"><span class="quack-threesemi-text">; Object Construction:
</span></span><span class="quack-pltish-comment"><span class="quack-threesemi-semi">;;;</span></span><span class="quack-pltish-comment"><span class="quack-threesemi-text">;       0           1          2             3              4             5         6
</span></span><span class="quack-pltish-comment"><span class="quack-threesemi-semi">;;;</span></span><span class="quack-pltish-comment"><span class="quack-threesemi-text">; #(object-tag get-method make-method! unmake-method! get-all-methods ancestors operate-as)
</span></span>
<span class="quack-pltish-comment"><span class="quack-threesemi-semi">;;;</span></span><span class="quack-pltish-comment"><span class="quack-threesemi-text">; Original header: ----------------------------------------------------
</span></span><span class="quack-pltish-comment"><span class="quack-threesemi-semi">;;;</span></span><span class="quack-pltish-comment"><span class="quack-threesemi-text"> "object.scm" Macroless Object System
</span></span><span class="quack-pltish-comment"><span class="quack-threesemi-semi">;;;</span></span><span class="quack-pltish-comment"><span class="quack-threesemi-text"> Author: Wade Humeniuk &lt;<a href="mailto:humeniuw&#64;cadvision.com">humeniuw&#64;cadvision.com</a>&gt;
</span></span><span class="quack-pltish-comment"><span class="quack-threesemi-semi">;;;</span></span><span class="quack-pltish-comment"><span class="quack-threesemi-text">
</span></span><span class="quack-pltish-comment"><span class="quack-threesemi-semi">;;;</span></span><span class="quack-pltish-comment"><span class="quack-threesemi-text"> This code is in the public domain.
</span></span>
<span class="quack-pltish-comment"><span class="quack-threesemi-semi">;;;</span></span><span class="quack-pltish-comment"><span class="quack-threesemi-text">Date:  February 15, 1994
</span></span>
<span class="quack-pltish-comment">;; Object Construction:
;;       0           1          2             3              4
;; #(object-tag get-method make-method! unmake-method! get-all-methods)
</span><span class="quack-pltish-comment"><span class="quack-threesemi-semi">;;;</span></span><span class="quack-pltish-comment"><span class="quack-threesemi-text">; ---------------------------------------------------------------------
</span></span>
<span class="quack-pltish-paren">(</span><span class="quack-pltish-keyword">define</span> <span class="quack-pltish-defn">object:tag</span> <span class="quack-pltish-selfeval">'object</span><span class="quack-pltish-paren">)</span>

<span class="quack-pltish-paren">(</span><span class="quack-pltish-keyword">define</span> <span class="quack-pltish-paren">(</span><span class="quack-pltish-defn">obj:tag</span> obj<span class="quack-pltish-paren">)</span>
  <span class="quack-pltish-paren">(</span>vector-ref obj <span class="quack-pltish-selfeval">0</span><span class="quack-pltish-paren">))</span>
<span class="quack-pltish-paren">(</span><span class="quack-pltish-keyword">define</span> <span class="quack-pltish-paren">(</span><span class="quack-pltish-defn">obj:get-methods</span> obj<span class="quack-pltish-paren">)</span>
  <span class="quack-pltish-paren">(</span>vector-ref obj <span class="quack-pltish-selfeval">1</span><span class="quack-pltish-paren">))</span>
<span class="quack-pltish-paren">(</span><span class="quack-pltish-keyword">define</span> <span class="quack-pltish-paren">(</span><span class="quack-pltish-defn">obj:make-method!</span> obj<span class="quack-pltish-paren">)</span>
  <span class="quack-pltish-paren">(</span>vector-ref obj <span class="quack-pltish-selfeval">2</span><span class="quack-pltish-paren">))</span>
<span class="quack-pltish-paren">(</span><span class="quack-pltish-keyword">define</span> <span class="quack-pltish-paren">(</span><span class="quack-pltish-defn">obj:unmake-method!</span> obj<span class="quack-pltish-paren">)</span>
  <span class="quack-pltish-paren">(</span>vector-ref obj <span class="quack-pltish-selfeval">3</span><span class="quack-pltish-paren">))</span>
<span class="quack-pltish-paren">(</span><span class="quack-pltish-keyword">define</span> <span class="quack-pltish-paren">(</span><span class="quack-pltish-defn">obj:get-all-methods</span> obj<span class="quack-pltish-paren">)</span>
  <span class="quack-pltish-paren">(</span>vector-ref obj <span class="quack-pltish-selfeval">4</span><span class="quack-pltish-paren">))</span>
<span class="quack-pltish-paren">(</span><span class="quack-pltish-keyword">define</span> <span class="quack-pltish-paren">(</span><span class="quack-pltish-defn">obj:ancestors</span> obj<span class="quack-pltish-paren">)</span>
  <span class="quack-pltish-paren">(</span>vector-ref obj <span class="quack-pltish-selfeval">5</span><span class="quack-pltish-paren">))</span>
<span class="quack-pltish-paren">(</span><span class="quack-pltish-keyword">define</span> <span class="quack-pltish-paren">(</span><span class="quack-pltish-defn">obj:operate-as</span> obj<span class="quack-pltish-paren">)</span>
  <span class="quack-pltish-paren">(</span>vector-ref obj <span class="quack-pltish-selfeval">6</span><span class="quack-pltish-paren">))</span>

<span class="quack-pltish-paren">(</span><span class="quack-pltish-keyword">define</span> <span class="quack-pltish-paren">(</span><span class="quack-pltish-defn">object?</span> obj<span class="quack-pltish-paren">)</span>
  <span class="quack-pltish-paren">(</span><span class="quack-pltish-keyword">and</span> <span class="quack-pltish-paren">(</span>vector? obj<span class="quack-pltish-paren">)</span>
       <span class="quack-pltish-paren">(</span>eq? object:tag <span class="quack-pltish-paren">(</span>obj:tag obj<span class="quack-pltish-paren">))))</span>

<span class="quack-pltish-comment"><span class="quack-threesemi-semi">;;;</span></span><span class="quack-pltish-comment"><span class="quack-threesemi-text"> This might be better done using COMLIST:DELETE-IF.
</span></span><span class="quack-pltish-paren">(</span><span class="quack-pltish-keyword">define</span> <span class="quack-pltish-paren">(</span><span class="quack-pltish-defn">object:removeq</span> obj alist<span class="quack-pltish-paren">)</span>
  <span class="quack-pltish-paren">(</span><span class="quack-pltish-keyword">if</span> <span class="quack-pltish-paren">(</span>null? alist<span class="quack-pltish-paren">)</span>
      alist
      <span class="quack-pltish-paren">(</span><span class="quack-pltish-keyword">if</span> <span class="quack-pltish-paren">(</span>eq? <span class="quack-pltish-paren">(</span>caar alist<span class="quack-pltish-paren">)</span> obj<span class="quack-pltish-paren">)</span>
          <span class="quack-pltish-paren">(</span>cdr alist<span class="quack-pltish-paren">)</span>
          <span class="quack-pltish-paren">(</span>cons <span class="quack-pltish-paren">(</span>car alist<span class="quack-pltish-paren">)</span> <span class="quack-pltish-paren">(</span>object:removeq obj <span class="quack-pltish-paren">(</span>cdr alist<span class="quack-pltish-paren">))))))</span>

<span class="quack-pltish-paren">(</span><span class="quack-pltish-keyword">define</span> <span class="quack-pltish-paren">(</span><span class="quack-pltish-defn">operate-as</span> obj ancestor-number method<span class="quack-pltish-paren">)</span>
  <span class="quack-pltish-paren">(</span><span class="quack-pltish-keyword">if</span> <span class="quack-pltish-paren">(</span>object? obj<span class="quack-pltish-paren">)</span>
      <span class="quack-pltish-paren">((</span>obj:operate-as obj<span class="quack-pltish-paren">)</span> ancestor-number method<span class="quack-pltish-paren">)</span>
      <span class="quack-pltish-paren">(</span>error <span class="quack-pltish-selfeval">"Cannot access ancestors of non-object: "</span> obj<span class="quack-pltish-paren">)))</span>

<span class="quack-pltish-paren">(</span><span class="quack-pltish-keyword">define</span> <span class="quack-pltish-paren">(</span><span class="quack-pltish-defn">get-all-methods</span> obj<span class="quack-pltish-paren">)</span>
  <span class="quack-pltish-paren">(</span><span class="quack-pltish-keyword">if</span> <span class="quack-pltish-paren">(</span>object? obj<span class="quack-pltish-paren">)</span>
      <span class="quack-pltish-paren">(</span>obj:get-all-methods obj<span class="quack-pltish-paren">)</span>
      <span class="quack-pltish-paren">(</span>error <span class="quack-pltish-selfeval">"Cannot get methods on non-object: "</span> obj<span class="quack-pltish-paren">)))</span>

<span class="quack-pltish-paren">(</span><span class="quack-pltish-keyword">define</span> <span class="quack-pltish-paren">(</span><span class="quack-pltish-defn">make-method!</span> obj generic-method method<span class="quack-pltish-paren">)</span>
  <span class="quack-pltish-paren">(</span><span class="quack-pltish-keyword">if</span> <span class="quack-pltish-paren">(</span>object? obj<span class="quack-pltish-paren">)</span>
      <span class="quack-pltish-paren">(</span><span class="quack-pltish-keyword">if</span> <span class="quack-pltish-paren">(</span>procedure? method<span class="quack-pltish-paren">)</span>
          <span class="quack-pltish-paren">(</span><span class="quack-pltish-keyword">begin</span>
            <span class="quack-pltish-paren">((</span>obj:make-method! obj<span class="quack-pltish-paren">)</span> generic-method method<span class="quack-pltish-paren">)</span>
            method<span class="quack-pltish-paren">)</span>
          <span class="quack-pltish-paren">(</span>error <span class="quack-pltish-selfeval">"Method must be a procedure: "</span> method<span class="quack-pltish-paren">))</span>
      <span class="quack-pltish-paren">(</span>error <span class="quack-pltish-selfeval">"Cannot make method on non-object: "</span> obj<span class="quack-pltish-paren">)))</span>

<span class="quack-pltish-paren">(</span><span class="quack-pltish-keyword">define</span> <span class="quack-pltish-paren">(</span><span class="quack-pltish-defn">get-method</span> obj generic-method<span class="quack-pltish-paren">)</span>
  <span class="quack-pltish-paren">(</span><span class="quack-pltish-keyword">if</span> <span class="quack-pltish-paren">(</span>object? obj<span class="quack-pltish-paren">)</span>
      <span class="quack-pltish-paren">((</span>obj:get-methods obj<span class="quack-pltish-paren">)</span> generic-method<span class="quack-pltish-paren">)</span>
      <span class="quack-pltish-paren">(</span>error <span class="quack-pltish-selfeval">"Cannot get method on non-object: "</span> obj<span class="quack-pltish-paren">)))</span>

<span class="quack-pltish-paren">(</span><span class="quack-pltish-keyword">define</span> <span class="quack-pltish-paren">(</span><span class="quack-pltish-defn">unmake-method!</span> obj generic-method<span class="quack-pltish-paren">)</span>
  <span class="quack-pltish-paren">(</span><span class="quack-pltish-keyword">if</span> <span class="quack-pltish-paren">(</span>object? obj<span class="quack-pltish-paren">)</span>
      <span class="quack-pltish-paren">((</span>obj:unmake-method! obj<span class="quack-pltish-paren">)</span> generic-method<span class="quack-pltish-paren">)</span>
      <span class="quack-pltish-paren">(</span>error <span class="quack-pltish-selfeval">"Cannot unmake method on non-object: "</span> obj<span class="quack-pltish-paren">)))</span>

<span class="quack-pltish-paren">(</span><span class="quack-pltish-keyword">define</span> <span class="quack-pltish-paren">(</span><span class="quack-pltish-defn">make-predicate!</span> obj generic-predicate<span class="quack-pltish-paren">)</span>
  <span class="quack-pltish-paren">(</span><span class="quack-pltish-keyword">if</span> <span class="quack-pltish-paren">(</span>object? obj<span class="quack-pltish-paren">)</span>
      <span class="quack-pltish-paren">((</span>obj:make-method! obj<span class="quack-pltish-paren">)</span> generic-predicate <span class="quack-pltish-paren">(</span><span class="quack-pltish-keyword">lambda</span> <span class="quack-pltish-paren">(</span>self<span class="quack-pltish-paren">)</span> <span class="quack-pltish-selfeval">#t</span><span class="quack-pltish-paren">))</span>
      <span class="quack-pltish-paren">(</span>error <span class="quack-pltish-selfeval">"Cannot make predicate on non-object: "</span> obj<span class="quack-pltish-paren">)))</span>

<span class="quack-pltish-paren">(</span><span class="quack-pltish-keyword">define</span> <span class="quack-pltish-paren">(</span><span class="quack-pltish-defn">make-generic-method</span> . exception-procedure<span class="quack-pltish-paren">)</span>
  <span class="quack-pltish-paren">(</span><span class="quack-pltish-keyword">define</span> <span class="quack-pltish-defn">generic-method</span>
    <span class="quack-pltish-paren">(</span><span class="quack-pltish-keyword">lambda</span> <span class="quack-pltish-paren">(</span>obj . operands<span class="quack-pltish-paren">)</span>
      <span class="quack-pltish-paren">(</span><span class="quack-pltish-keyword">if</span> <span class="quack-pltish-paren">(</span>object? obj<span class="quack-pltish-paren">)</span>
          <span class="quack-pltish-paren">(</span><span class="quack-pltish-keyword">let</span> <span class="quack-pltish-paren">((</span>object-method <span class="quack-pltish-paren">((</span>obj:get-methods obj<span class="quack-pltish-paren">)</span> generic-method<span class="quack-pltish-paren">)))</span>
            <span class="quack-pltish-paren">(</span><span class="quack-pltish-keyword">if</span> object-method
                <span class="quack-pltish-paren">(</span>apply object-method <span class="quack-pltish-paren">(</span>cons obj operands<span class="quack-pltish-paren">))</span>
                <span class="quack-pltish-paren">(</span>error <span class="quack-pltish-selfeval">"Method not supported: "</span> obj<span class="quack-pltish-paren">)))</span>
          <span class="quack-pltish-paren">(</span>apply exception-procedure <span class="quack-pltish-paren">(</span>cons obj operands<span class="quack-pltish-paren">)))))</span>

  <span class="quack-pltish-paren">(</span><span class="quack-pltish-keyword">if</span> <span class="quack-pltish-paren">(</span>not <span class="quack-pltish-paren">(</span>null? exception-procedure<span class="quack-pltish-paren">))</span>
      <span class="quack-pltish-paren">(</span><span class="quack-pltish-keyword">if</span> <span class="quack-pltish-paren">(</span>procedure? <span class="quack-pltish-paren">(</span>car exception-procedure<span class="quack-pltish-paren">))</span>
          <span class="quack-pltish-paren">(</span><span class="quack-pltish-keyword">set!</span> exception-procedure <span class="quack-pltish-paren">(</span>car exception-procedure<span class="quack-pltish-paren">))</span>
          <span class="quack-pltish-paren">(</span>error <span class="quack-pltish-selfeval">"Exception Handler Not Procedure:"</span><span class="quack-pltish-paren">))</span>
      <span class="quack-pltish-paren">(</span><span class="quack-pltish-keyword">set!</span> exception-procedure
            <span class="quack-pltish-paren">(</span><span class="quack-pltish-keyword">lambda</span> <span class="quack-pltish-paren">(</span>obj . params<span class="quack-pltish-paren">)</span>
              <span class="quack-pltish-paren">(</span>error <span class="quack-pltish-selfeval">"Operation not supported: "</span> obj<span class="quack-pltish-paren">))))</span>
  generic-method<span class="quack-pltish-paren">)</span>

<span class="quack-pltish-paren">(</span><span class="quack-pltish-keyword">define</span> <span class="quack-pltish-paren">(</span><span class="quack-pltish-defn">make-generic-predicate</span><span class="quack-pltish-paren">)</span>
  <span class="quack-pltish-paren">(</span><span class="quack-pltish-keyword">define</span> <span class="quack-pltish-defn">generic-predicate</span>
    <span class="quack-pltish-paren">(</span><span class="quack-pltish-keyword">lambda</span> <span class="quack-pltish-paren">(</span>obj<span class="quack-pltish-paren">)</span>
      <span class="quack-pltish-paren">(</span><span class="quack-pltish-keyword">if</span> <span class="quack-pltish-paren">(</span>object? obj<span class="quack-pltish-paren">)</span>
          <span class="quack-pltish-paren">(</span><span class="quack-pltish-keyword">if</span> <span class="quack-pltish-paren">((</span>obj:get-methods obj<span class="quack-pltish-paren">)</span> generic-predicate<span class="quack-pltish-paren">)</span>
              <span class="quack-pltish-selfeval">#t</span>
              <span class="quack-pltish-selfeval">#f</span><span class="quack-pltish-paren">)</span>
          <span class="quack-pltish-selfeval">#f</span><span class="quack-pltish-paren">)))</span>
  generic-predicate<span class="quack-pltish-paren">)</span>

<span class="quack-pltish-paren">(</span><span class="quack-pltish-keyword">define</span> <span class="quack-pltish-paren">(</span><span class="quack-pltish-defn">make-object</span> . ancestor-list<span class="quack-pltish-paren">)</span>
  <span class="quack-pltish-paren">(</span><span class="quack-pltish-keyword">define</span> <span class="quack-pltish-defn">method-list</span> <span class="quack-pltish-paren">(</span>list<span class="quack-pltish-paren">))</span>
  <span class="quack-pltish-paren">(</span><span class="quack-pltish-keyword">define</span> <span class="quack-pltish-defn">ancestors</span> <span class="quack-pltish-paren">(</span>list-&gt;vector <span class="quack-pltish-paren">(</span>cons <span class="quack-pltish-selfeval">'i-wish-self-could-go-here-but-i-dont-have-macros</span> ancestor-list<span class="quack-pltish-paren">)))</span>
  <span class="quack-pltish-paren">(</span><span class="quack-pltish-keyword">define</span> <span class="quack-pltish-defn">num-ancestors</span> <span class="quack-pltish-paren">(</span>length ancestor-list<span class="quack-pltish-paren">))</span> <span class="quack-pltish-comment">; I can't seem to (vector-length ancestors) here.
</span>  <span class="quack-pltish-paren">(</span><span class="quack-pltish-keyword">define</span> <span class="quack-pltish-paren">(</span><span class="quack-pltish-defn">operate-as</span> obj-num method<span class="quack-pltish-paren">)</span>
    <span class="quack-pltish-paren">(</span>method <span class="quack-pltish-paren">(</span>vector-ref ancestors obj-num<span class="quack-pltish-paren">)))</span>
  <span class="quack-pltish-paren">(</span><span class="quack-pltish-keyword">define</span> <span class="quack-pltish-paren">(</span><span class="quack-pltish-defn">make-method!</span> generic-method method<span class="quack-pltish-paren">)</span>
    <span class="quack-pltish-paren">(</span><span class="quack-pltish-keyword">set!</span> method-list <span class="quack-pltish-paren">(</span>cons <span class="quack-pltish-paren">(</span>cons generic-method method<span class="quack-pltish-paren">)</span> method-list<span class="quack-pltish-paren">))</span>
    method<span class="quack-pltish-paren">)</span>
  <span class="quack-pltish-paren">(</span><span class="quack-pltish-keyword">define</span> <span class="quack-pltish-paren">(</span><span class="quack-pltish-defn">unmake-method!</span> generic-method<span class="quack-pltish-paren">)</span>
    <span class="quack-pltish-paren">(</span><span class="quack-pltish-keyword">set!</span> method-list <span class="quack-pltish-paren">(</span>object:removeq generic-method method-list<span class="quack-pltish-paren">))</span>
    <span class="quack-pltish-selfeval">#t</span><span class="quack-pltish-paren">)</span>
  <span class="quack-pltish-paren">(</span><span class="quack-pltish-keyword">define</span> <span class="quack-pltish-paren">(</span><span class="quack-pltish-defn">methods</span><span class="quack-pltish-paren">)</span> method-list<span class="quack-pltish-paren">)</span>
  <span class="quack-pltish-paren">(</span><span class="quack-pltish-keyword">define</span> <span class="quack-pltish-paren">(</span><span class="quack-pltish-defn">get-method</span> generic-method<span class="quack-pltish-paren">)</span>
    <span class="quack-pltish-paren">(</span><span class="quack-pltish-keyword">let</span> <span class="quack-pltish-paren">((</span>method-def <span class="quack-pltish-paren">(</span>assq generic-method method-list<span class="quack-pltish-paren">)))</span>
      <span class="quack-pltish-paren">(</span><span class="quack-pltish-keyword">if</span> method-def
          <span class="quack-pltish-paren">(</span>cdr method-def<span class="quack-pltish-paren">)</span>
          <span class="quack-pltish-paren">(</span><span class="quack-pltish-keyword">let</span> loop <span class="quack-pltish-paren">((</span>current-ancestor <span class="quack-pltish-selfeval">1</span><span class="quack-pltish-paren">))</span>
            <span class="quack-pltish-paren">(</span><span class="quack-pltish-keyword">if</span> <span class="quack-pltish-paren">(</span>&gt; current-ancestor num-ancestors<span class="quack-pltish-paren">)</span>
                <span class="quack-pltish-selfeval">#f</span>
                <span class="quack-pltish-paren">(</span><span class="quack-pltish-keyword">let</span> <span class="quack-pltish-paren">((</span>method-def <span class="quack-pltish-paren">((</span>obj:get-methods <span class="quack-pltish-paren">(</span>vector-ref ancestors current-ancestor<span class="quack-pltish-paren">))</span> generic-method<span class="quack-pltish-paren">)))</span>
                  <span class="quack-pltish-paren">(</span><span class="quack-pltish-keyword">if</span> method-def
                      method-def
                      <span class="quack-pltish-paren">(</span>loop <span class="quack-pltish-paren">(</span>+ <span class="quack-pltish-selfeval">1</span> current-ancestor<span class="quack-pltish-paren">)))))))))</span>
  <span class="quack-pltish-paren">(</span>vector object:tag get-method make-method! unmake-method! methods ancestors operate-as<span class="quack-pltish-paren">))</span>

<span class="quack-pltish-comment">;; Samples:
</span>
<span class="quack-pltish-comment">;; SMOS/MOS:
;;
;; &gt; (define name (make-generic-method))
;; &gt; (define job (make-generic-method))
;; &gt; (define (person n)
;;     (define self (make-object))
;;     (make-method! self name (lambda (self) n))
;;     self)
;; &gt; (map name (list (person 'bob) (person 'ashley) (person 'george)))
;; (bob ashley george)
;; &gt; (define (worker n j)
;;     (define self (make-object (person n)))
;;     (make-method! self job (lambda (self) j))
;;     self)
;; &gt; (map name (list (worker 'bob 'mechanic) (worker 'ashley 'pilot) (worker 'george 'loanshark)))
;; (bob ashley george)
;; &gt; (map job (list (worker 'bob 'mechanic) (worker 'ashley 'pilot) (worker 'george 'loanshark)))
;; (mechanic pilot loanshark)
;; &gt;
</span>
<span class="quack-pltish-comment">;; SMOS operate-as:
;;
;; &gt; (define name (make-generic-method))
;; &gt; (define is (make-generic-method))
;; &gt; (define job (make-generic-method))
;; &gt; (define really (make-generic-method))
;; &gt;  (define (person n)
;;     (define self (make-object))
;;     (make-method! self name (lambda (self) n))
;;     (make-method! self is (lambda (self) 'person))
;;     self)
;; &gt;  (define (employee n j)
;;     (define self (make-object (person n)))
;;     (make-method! self job (lambda (self) j))
;;     (make-method! self is (lambda (self) 'slave))
;;     (make-method! self really (lambda (self) (operate-as self 1 is)))
;;     self)
;; &gt; (name (employee 'bob 'mechanic))
;; bob
;; &gt; (is (employee 'bob 'mechanic))
;; slave
;; &gt; (really (employee 'bob 'mechanic))
;; person
</span>
<span class="quack-pltish-paren">(</span><span class="quack-pltish-keyword">define</span> <span class="quack-pltish-defn">name</span> <span class="quack-pltish-paren">(</span>make-generic-method<span class="quack-pltish-paren">))</span>
<span class="quack-pltish-paren">(</span><span class="quack-pltish-keyword">define</span> <span class="quack-pltish-defn">is</span> <span class="quack-pltish-paren">(</span>make-generic-method<span class="quack-pltish-paren">))</span>
<span class="quack-pltish-paren">(</span><span class="quack-pltish-keyword">define</span> <span class="quack-pltish-defn">job</span> <span class="quack-pltish-paren">(</span>make-generic-method<span class="quack-pltish-paren">))</span>
<span class="quack-pltish-paren">(</span><span class="quack-pltish-keyword">define</span> <span class="quack-pltish-defn">really</span> <span class="quack-pltish-paren">(</span>make-generic-method<span class="quack-pltish-paren">))</span>
<span class="quack-pltish-paren">(</span><span class="quack-pltish-keyword">define</span> <span class="quack-pltish-paren">(</span><span class="quack-pltish-defn">person</span> n<span class="quack-pltish-paren">)</span>
  <span class="quack-pltish-paren">(</span><span class="quack-pltish-keyword">define</span> <span class="quack-pltish-defn">self</span> <span class="quack-pltish-paren">(</span>make-object<span class="quack-pltish-paren">))</span>
  <span class="quack-pltish-paren">(</span>make-method! self name <span class="quack-pltish-paren">(</span><span class="quack-pltish-keyword">lambda</span> <span class="quack-pltish-paren">(</span>self<span class="quack-pltish-paren">)</span> n<span class="quack-pltish-paren">))</span>
  <span class="quack-pltish-paren">(</span>make-method! self is <span class="quack-pltish-paren">(</span><span class="quack-pltish-keyword">lambda</span> <span class="quack-pltish-paren">(</span>self<span class="quack-pltish-paren">)</span> <span class="quack-pltish-selfeval">'person</span><span class="quack-pltish-paren">))</span>
  self<span class="quack-pltish-paren">)</span>
<span class="quack-pltish-paren">(</span><span class="quack-pltish-keyword">define</span> <span class="quack-pltish-paren">(</span><span class="quack-pltish-defn">employee</span> n j<span class="quack-pltish-paren">)</span>
  <span class="quack-pltish-paren">(</span><span class="quack-pltish-keyword">define</span> <span class="quack-pltish-defn">self</span> <span class="quack-pltish-paren">(</span>make-object <span class="quack-pltish-paren">(</span>person n<span class="quack-pltish-paren">)))</span>
  <span class="quack-pltish-paren">(</span>make-method! self job <span class="quack-pltish-paren">(</span><span class="quack-pltish-keyword">lambda</span> <span class="quack-pltish-paren">(</span>self<span class="quack-pltish-paren">)</span> j<span class="quack-pltish-paren">))</span>
  <span class="quack-pltish-paren">(</span>make-method! self is <span class="quack-pltish-paren">(</span><span class="quack-pltish-keyword">lambda</span> <span class="quack-pltish-paren">(</span>self<span class="quack-pltish-paren">)</span> <span class="quack-pltish-selfeval">'slave</span><span class="quack-pltish-paren">))</span>
  <span class="quack-pltish-paren">(</span>make-method! self really <span class="quack-pltish-paren">(</span><span class="quack-pltish-keyword">lambda</span> <span class="quack-pltish-paren">(</span>self<span class="quack-pltish-paren">)</span> <span class="quack-pltish-paren">(</span>operate-as self <span class="quack-pltish-selfeval">1</span> is<span class="quack-pltish-paren">)))</span>
  self<span class="quack-pltish-paren">)</span>
<span class="quack-pltish-paren">(</span>name <span class="quack-pltish-paren">(</span>employee <span class="quack-pltish-selfeval">'bob</span> <span class="quack-pltish-selfeval">'mechanic</span><span class="quack-pltish-paren">))</span>
<span class="quack-pltish-paren">(</span>is <span class="quack-pltish-paren">(</span>employee <span class="quack-pltish-selfeval">'bob</span> <span class="quack-pltish-selfeval">'mechanic</span><span class="quack-pltish-paren">))</span>
<span class="quack-pltish-paren">(</span>really <span class="quack-pltish-paren">(</span>employee <span class="quack-pltish-selfeval">'bob</span> <span class="quack-pltish-selfeval">'mechanic</span><span class="quack-pltish-paren">))</span>
</pre>
  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/prael.wordpress.com/100/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/prael.wordpress.com/100/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/prael.wordpress.com/100/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/prael.wordpress.com/100/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/prael.wordpress.com/100/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/prael.wordpress.com/100/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/prael.wordpress.com/100/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/prael.wordpress.com/100/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/prael.wordpress.com/100/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/prael.wordpress.com/100/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=prael.wordpress.com&blog=2445123&post=100&subd=prael&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://prael.wordpress.com/2009/07/06/smos/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/b856dee5bd9723033ad9895dd3d0f0b1?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">prael</media:title>
		</media:content>
	</item>
		<item>
		<title>ParrotVM</title>
		<link>http://prael.wordpress.com/2009/04/03/parrotvm/</link>
		<comments>http://prael.wordpress.com/2009/04/03/parrotvm/#comments</comments>
		<pubDate>Fri, 03 Apr 2009 07:53:04 +0000</pubDate>
		<dc:creator>prael</dc:creator>
				<category><![CDATA[Programming]]></category>
		<category><![CDATA[Scheme]]></category>

		<guid isPermaLink="false">http://prael.wordpress.com/2009/04/03/parrotvm/</guid>
		<description><![CDATA[3am ramblings of ParrotVM and Lisp.<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=prael.wordpress.com&blog=2445123&post=90&subd=prael&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p>Makes my pants uncomfortable. Register based, tail call optimizing, supports call/cc(!), has the beginnings of JIT compilation&#8230; the GC isn&#8217;t exactly bleeding edge but at least isn&#8217;t one of the stop-the-world sorts (something about 3 color marks and a background thread doing incremental sweeping IIRC), and like the layout algorithms in xmonad it is easy to replace with something better when one comes around. Oh yeah, and threading. Decent looking FFI. The promise of calling libs from other languages in the future (like the way OCaml can talk to any Perl module from CPAN). And it reached 1.0 with a stable API recently. And interestingly there seems to be talks about working along side the LLVM folk&#8230;</p>
<p>There&#8217;s just a lot of cool shit going on here. Whereas Java/.Net are trying to bolt in the infrastructure to support dynamic languages, Parrot&#8217;s designed from the ground up to do this. </p>
<p>Perhaps GC wouldn&#8217;t matter much if something like newLISP with its funky one reference only &#8220;GC&#8221; were ported to it&#8230; on that note I should try to compile newLISP to LLVM bytecode.</p>
<p>And Java&#8217;s planning (apparently) on supporting TCO and if it already did, so would Clojure (the recur thing just drives me loopy, pun intended), and I probably never would have noticed Parrot. </p>
<p>For that matter, Clojure on Parrot would rock my balls too. And there&#8217;s word of Parrot eventually maybe understanding JVM/.Net bytecode&#8230; shouldn&#8217;t be much of a tweak from there&#8230;</p>
<p>You know? A few months ago I found myself wishing I had been born in the 60&#8217;s or 70&#8217;s, so I could have been around when all of the cool Lisp stuff was happening. I think I&#8217;ve changed my mind&#8230; this is a fucking awesome time to be here.</p>
<p>And as long as my ParrotVM post has turned into an obscure Lisp post, I should mention Arc. Arc is a Lisp. There, I mentioned it. Now let&#8217;s never speak of that again.</p>
  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/prael.wordpress.com/90/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/prael.wordpress.com/90/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/prael.wordpress.com/90/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/prael.wordpress.com/90/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/prael.wordpress.com/90/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/prael.wordpress.com/90/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/prael.wordpress.com/90/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/prael.wordpress.com/90/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/prael.wordpress.com/90/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/prael.wordpress.com/90/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=prael.wordpress.com&blog=2445123&post=90&subd=prael&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://prael.wordpress.com/2009/04/03/parrotvm/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/b856dee5bd9723033ad9895dd3d0f0b1?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">prael</media:title>
		</media:content>
	</item>
		<item>
		<title>Who wants a non-toy R5RS Scheme on the Parrot VM?</title>
		<link>http://prael.wordpress.com/2009/04/03/who-wants-a-non-toy-r5rs-scheme-on-the-parrot-vm/</link>
		<comments>http://prael.wordpress.com/2009/04/03/who-wants-a-non-toy-r5rs-scheme-on-the-parrot-vm/#comments</comments>
		<pubDate>Fri, 03 Apr 2009 07:15:17 +0000</pubDate>
		<dc:creator>prael</dc:creator>
				<category><![CDATA[Programming]]></category>
		<category><![CDATA[Scheme]]></category>

		<guid isPermaLink="false">http://prael.wordpress.com/2009/04/03/who-wants-a-non-toy-r5rs-scheme-on-the-parrot-vm/</guid>
		<description><![CDATA[Port Scheme48's pre-scheme to Parrot, win full S48 in return.<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=prael.wordpress.com&blog=2445123&post=89&subd=prael&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p>So do I, go write me one. Here&#8217;s how (I hope):</p>
<p>pre-scheme is essentially a lispy-syntax C, complete with memory allocations, freeing, goto, minimal TCO, no GC&#8230; basically disgusting from a (this, anyway) lisper&#8217;s POV, and a far cry from the shear sexiness of R5.</p>
<p>The interesting thing about it though (other than making C a saner language) is that Scheme48&#8217;s VM is implemented via Scheme48&#8217;s pre-scheme-&gt;C translator, which as it happens, in true Lisp fashion, is itself implemented in Scheme. And I&#8217;d imagine implementing the minimalistic pre-scheme to be a far sight easier than implementing all of R5. You can look at the Scheme48 distribution&#8217;s makefile to see how to go about getting pre-scheme loaded to play with. </p>
<p>It may be a weird way to go about it, running a stack based VM atop a register based one (let alone one wanting malloc/free), but I&#8217;d think it to be the quickest route towards non-toy R5 on Parrot, and if nothing else a sufficient stop-gap until &#8220;native&#8221; implementations approach practical usability. Plus you already have most of your test suite for free.</p>
<p>Of course I havn&#8217;t looked into this in any depth, particularly what the Parrot implementation of pre-scheme would need to do other than parse the syntax. And I don&#8217;t really have the time to.  So I thought I&#8217;d toss the idea out there and see if anyone else picks it up.  What the hell, it&#8217;s worth a shot right?</p>
  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/prael.wordpress.com/89/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/prael.wordpress.com/89/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/prael.wordpress.com/89/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/prael.wordpress.com/89/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/prael.wordpress.com/89/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/prael.wordpress.com/89/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/prael.wordpress.com/89/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/prael.wordpress.com/89/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/prael.wordpress.com/89/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/prael.wordpress.com/89/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=prael.wordpress.com&blog=2445123&post=89&subd=prael&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://prael.wordpress.com/2009/04/03/who-wants-a-non-toy-r5rs-scheme-on-the-parrot-vm/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/b856dee5bd9723033ad9895dd3d0f0b1?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">prael</media:title>
		</media:content>
	</item>
		<item>
		<title>I&#8217;m still alive.</title>
		<link>http://prael.wordpress.com/2009/03/17/im-still-alive/</link>
		<comments>http://prael.wordpress.com/2009/03/17/im-still-alive/#comments</comments>
		<pubDate>Tue, 17 Mar 2009 14:41:41 +0000</pubDate>
		<dc:creator>prael</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://prael.wordpress.com/2009/03/17/im-still-alive/</guid>
		<description><![CDATA[Has been busy around here lately. 
       <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=prael.wordpress.com&blog=2445123&post=88&subd=prael&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p>Has been busy around here lately. </p>
  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/prael.wordpress.com/88/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/prael.wordpress.com/88/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/prael.wordpress.com/88/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/prael.wordpress.com/88/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/prael.wordpress.com/88/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/prael.wordpress.com/88/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/prael.wordpress.com/88/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/prael.wordpress.com/88/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/prael.wordpress.com/88/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/prael.wordpress.com/88/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=prael.wordpress.com&blog=2445123&post=88&subd=prael&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://prael.wordpress.com/2009/03/17/im-still-alive/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/b856dee5bd9723033ad9895dd3d0f0b1?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">prael</media:title>
		</media:content>
	</item>
		<item>
		<title>SoLoad: Enough FFI to get the job done.</title>
		<link>http://prael.wordpress.com/2008/12/18/soload-enough-ffi-to-get-the-job-done/</link>
		<comments>http://prael.wordpress.com/2008/12/18/soload-enough-ffi-to-get-the-job-done/#comments</comments>
		<pubDate>Thu, 18 Dec 2008 22:03:07 +0000</pubDate>
		<dc:creator>prael</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://prael.wordpress.com/?p=85</guid>
		<description><![CDATA[Process based pseudo FFI. Fucking awesome. I had been doing similar stuff with tclsh and wish via snow&#8217;s tk package to take advantage of TCL libraries, but this looks to be much much nicer and provides access to C libs.
If you don&#8217;t need callbacks or worry much about continuations, this should save a great deal [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=prael.wordpress.com&blog=2445123&post=85&subd=prael&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p>Process based pseudo FFI. Fucking awesome. I had been doing similar stuff with tclsh and wish via snow&#8217;s tk package to take advantage of TCL libraries, but this looks to be much much nicer and provides access to C libs.<br />
If you don&#8217;t need callbacks or worry much about continuations, this should save a great deal of headache. And if you do, well, a few scheme implementations support SWIG anyway.</p>
<p><a href="http://willdonnelly.wordpress.com/2008/08/30/the-soload-foreign-function-server-part-i-an-introduction/">SoLoad intro</a><br />
<a href="http://willdonnelly.wordpress.com/2008/09/12/the-soload-foreign-function-server-part-ii-basic-usage/">SoLoad basic</a><br />
<a href="http://willdonnelly.wordpress.com/2008/09/15/the-soload-foreign-function-server-part-iii-intermediate-usage/">SoLoad intermediate</a><br />
<a href="https://launchpad.net/soload">SoLoad at Launchpad</a><br />
<a href="http://soload.wikidot.com/">SoLoad wiki</a></p>
  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/prael.wordpress.com/85/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/prael.wordpress.com/85/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/prael.wordpress.com/85/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/prael.wordpress.com/85/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/prael.wordpress.com/85/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/prael.wordpress.com/85/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/prael.wordpress.com/85/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/prael.wordpress.com/85/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/prael.wordpress.com/85/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/prael.wordpress.com/85/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=prael.wordpress.com&blog=2445123&post=85&subd=prael&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://prael.wordpress.com/2008/12/18/soload-enough-ffi-to-get-the-job-done/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/b856dee5bd9723033ad9895dd3d0f0b1?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">prael</media:title>
		</media:content>
	</item>
	</channel>
</rss>