<?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/"
	>

<channel>
	<title>rogersm.net &#187; papers-read</title>
	<atom:link href="http://rogersm.net/category/papers-read/feed" rel="self" type="application/rss+xml" />
	<link>http://rogersm.net</link>
	<description>exploring area</description>
	<lastBuildDate>Fri, 06 Nov 2009 11:29:54 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0.1</generator>
		<item>
		<title>Getting into Prolog, again</title>
		<link>http://rogersm.net/2009/09/getting-into-prolog-again</link>
		<comments>http://rogersm.net/2009/09/getting-into-prolog-again#comments</comments>
		<pubDate>Tue, 01 Sep 2009 14:43:13 +0000</pubDate>
		<dc:creator>rogersm</dc:creator>
				<category><![CDATA[ai]]></category>
		<category><![CDATA[papers-read]]></category>
		<category><![CDATA[programming]]></category>
		<category><![CDATA[clocksin]]></category>
		<category><![CDATA[mellish]]></category>
		<category><![CDATA[prolog]]></category>
		<category><![CDATA[swi-prolog]]></category>
		<category><![CDATA[wielemaker]]></category>

		<guid isPermaLink="false">http://rogersm.net/?p=148</guid>
		<description><![CDATA[I&#8217;ve been getting into with Prolog lately. I had not programmed prolog since university but I wanted to play with expert systems, and Prolog was even better than lisp for prototyping. So, because all the Prolog papers I was reviewing were referencing Programming in Prolog by W. F. Clocksin and C. S. Mellish I bought [...]]]></description>
			<content:encoded><![CDATA[<p>I&#8217;ve been getting into with Prolog lately. I had not programmed prolog since university but I wanted to play with expert systems, and Prolog was even better than lisp for prototyping.</p>
<p>So, because all the Prolog papers I was reviewing were referencing <a title="Google Books" href="http://books.google.de/books?id=lbcXj6GbMoQC&amp;dq=Programming+in+Prolog&amp;printsec=frontcover&amp;source=bl&amp;ots=9QG_rsw1AP&amp;sig=aGXPVwXHBMmFigtaTwNy4Vr7Wyo&amp;hl=en&amp;ei=2yudSoHPBZ-wnQOk1aG_Ag&amp;sa=X&amp;oi=book_result&amp;ct=result&amp;resnum=3#v=onepage&amp;q=&amp;f=false">Programming in Prolog  by W. F. Clocksin and C. S. Mellish</a> I bought an older (and cheap) edition to re-read. I was surprised how good the book is for learning to program in Prolog.</p>
<p>You can use the wonderful <a title="by Patrick Blackburn, Johan Bos and Kristina Striegnitz" href="http://www.learnprolognow.org/">Learn Prolog Now!</a> as a free introduction text, but Clocksin and Mellish chapters on grammar rules, debugging and laying out programs makes the book priceless.</p>
<p>And if you want to use prolog for &#8216;practical matters&#8217; I strongly recommend <a title="SWI-Prolog guru" href="http://staff.science.uva.nl/~wielemak/">Jan Wielemaker</a> Ph. D. disertation: <a title="PDF file" href="http://www.swi-prolog.org/download/publications/jan-phd.pdf">Logic programming for knowledge-intensive interactive applications</a>. You&#8217;ll find a good overview about using Prolog outside the logic course: Web, multi-threaded, RDFs, literate programming, interfacing with object-oriented systems and interfacing with C for creating data storages.</p>
<p>Finally, If you come from the functional programming world, download <a title="by Ralf Lämmel " href="http://www.uni-koblenz.de/~laemmel/OdeToProlog/">Scrap Your Boilerplate&#8212;Prologically!</a> a Prolog version of the <a title="a lightweight generic programming approach" href="http://www.cs.vu.nl/boilerplate/#more-papers">Scrap Your Boilerplate set of papers</a>. It is a great addition for learning Prolog if your background is functional.</p>
]]></content:encoded>
			<wfw:commentRss>http://rogersm.net/2009/09/getting-into-prolog-again/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Logic Programming for knowledge intensive applications thesis</title>
		<link>http://rogersm.net/2009/03/logic-programming-for-knowledge-application</link>
		<comments>http://rogersm.net/2009/03/logic-programming-for-knowledge-application#comments</comments>
		<pubDate>Wed, 25 Mar 2009 11:01:50 +0000</pubDate>
		<dc:creator>rogersm</dc:creator>
				<category><![CDATA[papers-read]]></category>
		<category><![CDATA[programming]]></category>
		<category><![CDATA[prolog]]></category>
		<category><![CDATA[swi-prolog]]></category>
		<category><![CDATA[wielemaker]]></category>

		<guid isPermaLink="false">http://rogersm.net/?p=124</guid>
		<description><![CDATA[Jan Wielemaker, SWI-Prolog contributor has published his PhD thesis: Logic programming for knowledge-intensive interactive applications. I&#8217;ve been getting back to knowledge based applications again and again and Jan&#8217;s thesys looks good enough to invest some time reading the 257 pdf file.  Additionally, the swi-prolog site has an interesting page with some additional publications.]]></description>
			<content:encoded><![CDATA[<p><a title="University of Amsterdam" href="http://staff.science.uva.nl/~wielemak/">Jan Wielemaker</a>, SWI-Prolog contributor has published his PhD thesis: <a href="http://www.swi-prolog.org/download/publications/jan-phd.pdf">Logic programming for knowledge-intensive interactive applications</a>.</p>
<p>I&#8217;ve been getting back to knowledge based applications again and again and Jan&#8217;s thesys looks good enough to invest some time reading the 257 pdf file. </p>
<p>Additionally, the swi-prolog site has an interesting page with<a href="http://www.swi-prolog.org/Publications.html"> some additional publications</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://rogersm.net/2009/03/logic-programming-for-knowledge-application/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Reusability problems with inheritance</title>
		<link>http://rogersm.net/2008/11/reusability-problems-with-inheritance</link>
		<comments>http://rogersm.net/2008/11/reusability-problems-with-inheritance#comments</comments>
		<pubDate>Sun, 30 Nov 2008 19:06:06 +0000</pubDate>
		<dc:creator>rogersm</dc:creator>
				<category><![CDATA[papers-read]]></category>
		<category><![CDATA[programming]]></category>
		<category><![CDATA[smalltalk]]></category>
		<category><![CDATA[traits]]></category>

		<guid isPermaLink="false">http://rogersm.net/?p=33</guid>
		<description><![CDATA[The paper Traits: Composable Units of Behaviour contains a great description why inheritance is not the best tool for code reuse. Basically code reuse and inheritance are not orthogonal, so I never know if my class hierarchy should be designed to maximize code reuse, or if I should limit my code reuse not to interfere [...]]]></description>
			<content:encoded><![CDATA[<p>The paper <a title="by Nathanael Schärli, Stéphane Ducasse, Oscar Nierstrasz, Andrew P. Black" href="http://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.14.4200">Traits: Composable Units of Behaviour</a> contains a great description why inheritance is not the best tool for code reuse.</p>
<p>Basically code reuse and inheritance are not orthogonal, so I never know if my class hierarchy should be designed to maximize code reuse, or if I should limit my code reuse not to interfere with the class hierarchy. There&#8217;s no simple rule, and it isn&#8217;t trivial to make the right decision. As the paper summarizes:</p>
<blockquote><p>[...]multiple inheritance uses the notion of a class in two competing roles: the generator of instances and the unit of code reuse</p></blockquote>
<p>Schärli, Ducasse, Nierstrasz and Black describe the pitfalls of inheritance (single, multiple and through mixins) as a code reuse tool in their paper (check chapter 2) with such clarity I recommend any OOP programmer to read the paper.</p>
<p>Unfortunately they do not consider delegation in the mix, so there is some room for improvement. Their only reference is at the end of chapter 7:</p>
<blockquote><p>Delegation (also known as “object-based inheritance”) is another form of composition that side-steps many of the problems related to class-based inheritance <a title="by Gunter Kniesel " href="http://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.33.7584">[24]</a></p></blockquote>
<p>Have in mind this paper is not about reusability problems with inheritance, but about traits, their proposed solution to these problems. If you&#8217;re interested in traits you&#8217;ll find a good discussion in Reddit&#8217;s thread <a title="Some good comments here" href="http://www.reddit.com/r/programming/comments/7fcaq/oo_programming_why_traits_rule_and_mixins_and/">OO Programming: why &#8220;traits&#8221; rule and mixins and multiple inheritance suck</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://rogersm.net/2008/11/reusability-problems-with-inheritance/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Laziness pays in functional languages</title>
		<link>http://rogersm.net/2008/11/laziness-pays-in-functional-languages</link>
		<comments>http://rogersm.net/2008/11/laziness-pays-in-functional-languages#comments</comments>
		<pubDate>Tue, 18 Nov 2008 14:19:22 +0000</pubDate>
		<dc:creator>rogersm</dc:creator>
				<category><![CDATA[papers-read]]></category>
		<category><![CDATA[chakravarty]]></category>
		<category><![CDATA[lazy]]></category>
		<category><![CDATA[lexer]]></category>

		<guid isPermaLink="false">http://rogersm.net/?p=29</guid>
		<description><![CDATA[One of the myths surrounding functional programming techniques is lazy evaluation does not pay. Reading an old paper about dynamic creation of lexical analysers (lexers) I discovered an interesting use for lazy evaluation: Manuel M. T. Chakravarty writes a paper about lexer creation using combinators. He&#8217;s trying to obtain more flexibility by sidestepping the table-driven [...]]]></description>
			<content:encoded><![CDATA[<p>One of the myths surrounding functional programming techniques is lazy evaluation does not pay.</p>
<p>Reading <a title="Lazy lexing is fast by Manuel M.T. Chakravarty" href="http://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.26.5166">an old paper</a> about dynamic creation of lexical analysers (lexers) I discovered an interesting use for lazy evaluation: <a title="School of Computer Science and Engineering at the University of New South Wales" href="http://www.cse.unsw.edu.au/~chak/">Manuel M. T. Chakravarty</a> writes a paper about lexer creation using combinators. He&#8217;s trying to obtain more flexibility by sidestepping the table-driven analysers used in static lexers and parsers.</p>
<p>He transforms the state table to a directed graph he builds lazily as the lexer reads the input. Using the laziness provided by the language he&#8217;s able to evaluate each part of the graph only once without keeping any overhead of what has already been evaluated.</p>
<p>This technique is a practical example of the usefulness of lazy evaluation, as he concludes:</p>
<blockquote><p>non-strictness allows to significantly optimise the implementation of recursive combinators by exploiting cyclic structures. Furthermore, the lazy construction of the state transition graph minimises start-up costs when the input does not use all regular expressions of the lexical specification.</p></blockquote>
<p>For the more bench mark oriented people, his results are pretty good. The handcoded lexer needs about 70% of the execution time of his dinamyc lexer.</p>
]]></content:encoded>
			<wfw:commentRss>http://rogersm.net/2008/11/laziness-pays-in-functional-languages/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
	</channel>
</rss>

<!-- Dynamic Page Served (once) in 0.286 seconds -->
