<?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>Dan&#039;s Thoughts &#187; Uncategorized</title>
	<atom:link href="http://danboykis.com/category/uncategorized/feed/" rel="self" type="application/rss+xml" />
	<link>http://danboykis.com</link>
	<description>Thinking somewhat carefully</description>
	<lastBuildDate>Thu, 12 Aug 2010 21:28:22 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.1-alpha</generator>
		<item>
		<title>Exercise 1.45 of SICP</title>
		<link>http://danboykis.com/2009/07/exercise-1-45-of-sicp/</link>
		<comments>http://danboykis.com/2009/07/exercise-1-45-of-sicp/#comments</comments>
		<pubDate>Thu, 16 Jul 2009 02:17:16 +0000</pubDate>
		<dc:creator>dan</dc:creator>
				<category><![CDATA[SICP]]></category>
		<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[algorithms]]></category>
		<category><![CDATA[lisp]]></category>
		<category><![CDATA[math]]></category>

		<guid isPermaLink="false">http://danboykis.com/?p=1128</guid>
		<description><![CDATA[Exercise 1.45: We saw in section 1.3.3 that attempting to compute square roots by naively finding a fixed point of does not converge, and that this can be fixed by average damping. The same method works for finding cube roots as fixed points of the average-damped . Unfortunately, the process does not work for fourth [...]]]></description>
			<content:encoded><![CDATA[<p><b>Exercise 1.45:</b>  We saw in section 1.3.3 that attempting to compute square roots by naively finding a fixed point of <img src='http://danboykis.com/wp-content/latex/c7f/c7fab3f4d701f5260182910732191113-ffffff-000000-0.png' alt='y \mapsto \frac{x}{y}' title='y \mapsto \frac{x}{y}' class='latex' /> does not converge, and that this can be fixed by average damping. The same method works for finding cube roots as fixed points of the <b>average-damp</b>ed <img src='http://danboykis.com/wp-content/latex/eb1/eb16dfd3882ae37ea3d282e74b64bdef-ffffff-000000-0.png' alt='y \mapsto \frac{x}{y^2}' title='y \mapsto \frac{x}{y^2}' class='latex' />. Unfortunately, the process does not work for fourth roots -- a single average damp is not enough to make a <b>fixed-point</b> search for  <img src='http://danboykis.com/wp-content/latex/cd6/cd63fae9f13b28a2be660b56adfd7c20-ffffff-000000-0.png' alt='y \mapsto \frac{x}{y^3}' title='y \mapsto \frac{x}{y^3}' class='latex' /> converge. On the other hand, if we average damp twice (i.e., use the average damp of the average damp of <img src='http://danboykis.com/wp-content/latex/cd6/cd63fae9f13b28a2be660b56adfd7c20-ffffff-000000-0.png' alt='y \mapsto \frac{x}{y^3}' title='y \mapsto \frac{x}{y^3}' class='latex' />) the <b>fixed-point</b> search does converge. Do some experiments to determine how many average damps are required to compute nth roots as a <b>fixed-point</b> search based upon repeated average damping of <img src='http://danboykis.com/wp-content/latex/500/5003b6b550c8de4f33f3ba51d0e17998-ffffff-000000-0.png' alt='y \mapsto \frac{x}{y^{n-1}}' title='y \mapsto \frac{x}{y^{n-1}}' class='latex' />. Use this to implement a simple procedure for computing n<sup>th</sup> roots using <b>fixed-point</b>, <b>average-damp</b>, and the repeated procedure of exercise 1.43. Assume that any arithmetic operations you need are available as primitives. </p>
<p>Doing experiments on the average number of damps to get the fixed-point procedure to converge seems to be:</p>
<table border="1">
<tr>
<td>Degree of root</td>
<td>Power of 2</td>
<td>Number of average damps</td>
</tr>
<tr>
<td>2 </td>
<td>2<sup>1</sup></td>
<td>1</td>
</tr>
<tr>
<td>4 </td>
<td>2<sup>2</sup></td>
<td>2</td>
</tr>
<tr>
<td>8 </td>
<td>2<sup>3</sup></td>
<td>3</td>
</tr>
<tr>
<td>16</td>
<td>2<sup>4</sup></td>
<td>4</td>
</tr>
<tr>
<td>32</td>
<td>2<sup>5</sup></td>
<td>5</td>
</tr>
</table>
<p>Using this basis it makes sense to write a procedure <strong>discrete-log</strong> that computes the number of powers of 2 in a given number. It's a bit like a very primitive implementation log<sub>2</sub> function hence the name. Discrete-log is <img src='http://danboykis.com/wp-content/latex/285/285b5b93bad20246645ec22894fcc069-ffffff-000000-0.png' alt='\Theta(\log_2 n)' title='\Theta(\log_2 n)' class='latex' /> because it halves the number of computations every iteration.</p>

<div class="wp_syntax"><div class="code"><pre class="scheme" style="font-family:monospace;"><span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">define</span> <span style="color: #66cc66;">&#40;</span>root num degree<span style="color: #66cc66;">&#41;</span>
  <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">define</span> <span style="color: #66cc66;">&#40;</span>discrete<span style="color: #66cc66;">-</span><span style="color: #b1b100;">log</span> n<span style="color: #66cc66;">&#41;</span>
    <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">if</span> <span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&lt;</span> n <span style="color: #cc66cc;">2</span><span style="color: #66cc66;">&#41;</span>
      <span style="color: #cc66cc;">0</span>
      <span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">+</span> <span style="color: #cc66cc;">1</span> <span style="color: #66cc66;">&#40;</span>discrete<span style="color: #66cc66;">-</span><span style="color: #b1b100;">log</span> <span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">/</span> n <span style="color: #cc66cc;">2</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>
  <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">define</span> <span style="color: #66cc66;">&#40;</span>compose <span style="color: #b1b100;">f</span> g<span style="color: #66cc66;">&#41;</span>
    <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">lambda</span> <span style="color: #66cc66;">&#40;</span>x<span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">f</span> <span style="color: #66cc66;">&#40;</span>g x<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>
  <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">define</span> <span style="color: #66cc66;">&#40;</span>repeated<span style="color: #66cc66;">-</span>compose <span style="color: #b1b100;">f</span> n<span style="color: #66cc66;">&#41;</span>
    <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">if</span> <span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&lt;</span> n <span style="color: #cc66cc;">2</span><span style="color: #66cc66;">&#41;</span>
      <span style="color: #b1b100;">f</span>
      <span style="color: #66cc66;">&#40;</span>compose <span style="color: #b1b100;">f</span> <span style="color: #66cc66;">&#40;</span>repeated<span style="color: #66cc66;">-</span>compose <span style="color: #b1b100;">f</span> <span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">-</span> n <span style="color: #cc66cc;">1</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>
  <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">define</span> <span style="color: #66cc66;">&#40;</span>average<span style="color: #66cc66;">-</span>damp <span style="color: #b1b100;">f</span><span style="color: #66cc66;">&#41;</span>
    <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">lambda</span> <span style="color: #66cc66;">&#40;</span>x<span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">/</span> <span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">+</span> x <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">f</span> x<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span> <span style="color: #cc66cc;">2</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>
  <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">let</span> <span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#40;</span>number<span style="color: #66cc66;">-</span>of<span style="color: #66cc66;">-</span>compositions <span style="color: #66cc66;">&#40;</span>discrete<span style="color: #66cc66;">-</span><span style="color: #b1b100;">log</span> degree<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>
        <span style="color: #66cc66;">&#40;</span>initial<span style="color: #66cc66;">-</span>function <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">lambda</span> <span style="color: #66cc66;">&#40;</span>x<span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">/</span> num <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">expt</span> x <span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">-</span> degree <span style="color: #cc66cc;">1</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>
    <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">cond</span> <span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">=</span> degree <span style="color: #cc66cc;">0</span><span style="color: #66cc66;">&#41;</span> <span style="color: #cc66cc;">1</span><span style="color: #66cc66;">&#41;</span>
          <span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">=</span> degree <span style="color: #cc66cc;">1</span><span style="color: #66cc66;">&#41;</span> num<span style="color: #66cc66;">&#41;</span>
          <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">else</span>
            <span style="color: #66cc66;">&#40;</span>fixed<span style="color: #66cc66;">-</span>point 
              <span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#40;</span>repeated<span style="color: #66cc66;">-</span>compose average<span style="color: #66cc66;">-</span>damp number<span style="color: #66cc66;">-</span>of<span style="color: #66cc66;">-</span>compositions<span style="color: #66cc66;">&#41;</span> initial<span style="color: #66cc66;">-</span>function<span style="color: #66cc66;">&#41;</span>
              <span style="color: #cc66cc;">1.0</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>
<span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">define</span> <span style="color: #66cc66;">&#40;</span>fixed<span style="color: #66cc66;">-</span>point <span style="color: #b1b100;">f</span> guess<span style="color: #66cc66;">&#41;</span>
  <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">define</span> error <span style="color: #cc66cc;">0.001</span><span style="color: #66cc66;">&#41;</span>
  <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">define</span> <span style="color: #66cc66;">&#40;</span>close<span style="color: #66cc66;">-</span>enough? x y<span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&lt;</span> <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">abs</span> <span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">-</span> <span style="color: #cc66cc;">1</span> <span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">/</span> x y<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span> error<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>
  <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">define</span> <span style="color: #66cc66;">&#40;</span>try guess<span style="color: #66cc66;">&#41;</span>
    <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">let</span> <span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#40;</span>new<span style="color: #66cc66;">-</span>guess <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">f</span> guess<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>
      <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">if</span> <span style="color: #66cc66;">&#40;</span>close<span style="color: #66cc66;">-</span>enough? guess new<span style="color: #66cc66;">-</span>guess<span style="color: #66cc66;">&#41;</span>
        new<span style="color: #66cc66;">-</span>guess
        <span style="color: #66cc66;">&#40;</span>try new<span style="color: #66cc66;">-</span>guess<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>
  <span style="color: #66cc66;">&#40;</span>try guess<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span></pre></div></div>

<p>> (root 2 0)<br />
<em>1</em><br />
> (root 2 1)<br />
<em>2</em><br />
> (root 2 2)<br />
<em>1.4142135623746899</em><br />
> (root (expt 2 50) 50)<br />
<em>1.9999956962054166</em><br />
> (root 0.00000001 2)<br />
<em>1.0000000000082464e-4</em></p>
<p>This program summarizes most of Chapter 1. It has lexical scope, passing functions as parameters, functions that construct and return other functions and the square root algorithm with an improved <strong>close-enough?</strong> procedure from exercise 1.7.<br />
The <strong>repeated-compose</strong> and <strong>discrete-log</strong> could be done iteratively instead of recursively like this.</p>

<div class="wp_syntax"><div class="code"><pre class="scheme" style="font-family:monospace;"><span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">define</span> <span style="color: #66cc66;">&#40;</span>repeated<span style="color: #66cc66;">-</span>compose <span style="color: #b1b100;">f</span> n<span style="color: #66cc66;">&#41;</span>
  <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">define</span> <span style="color: #66cc66;">&#40;</span>compose <span style="color: #b1b100;">f</span> g<span style="color: #66cc66;">&#41;</span>
    <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">lambda</span> <span style="color: #66cc66;">&#40;</span>x<span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">f</span> <span style="color: #66cc66;">&#40;</span>g x<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>
  <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">define</span> <span style="color: #66cc66;">&#40;</span>iter n func<span style="color: #66cc66;">&#41;</span>
    <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">if</span> <span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&lt;</span> n <span style="color: #cc66cc;">2</span><span style="color: #66cc66;">&#41;</span>
      func
      <span style="color: #66cc66;">&#40;</span>iter <span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">-</span> n <span style="color: #cc66cc;">1</span><span style="color: #66cc66;">&#41;</span> 
            <span style="color: #66cc66;">&#40;</span>compose <span style="color: #b1b100;">f</span> func<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>
  <span style="color: #66cc66;">&#40;</span>iter n <span style="color: #b1b100;">f</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span></pre></div></div>


<div class="wp_syntax"><div class="code"><pre class="scheme" style="font-family:monospace;"><span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">define</span> <span style="color: #66cc66;">&#40;</span>discrete<span style="color: #66cc66;">-</span><span style="color: #b1b100;">log</span> n<span style="color: #66cc66;">&#41;</span>
  <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">define</span> <span style="color: #66cc66;">&#40;</span>iter n exponent<span style="color: #66cc66;">&#41;</span>
    <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">if</span> <span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&lt;</span> n <span style="color: #cc66cc;">2</span><span style="color: #66cc66;">&#41;</span>
      exponent
      <span style="color: #66cc66;">&#40;</span>iter <span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">/</span> n <span style="color: #cc66cc;">2</span><span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">+</span> <span style="color: #cc66cc;">1</span> exponent<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>
  <span style="color: #66cc66;">&#40;</span>iter n <span style="color: #cc66cc;">0</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span></pre></div></div>

]]></content:encoded>
			<wfw:commentRss>http://danboykis.com/2009/07/exercise-1-45-of-sicp/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>tailor svn to hg</title>
		<link>http://danboykis.com/2008/07/tailor-svn-to-hg/</link>
		<comments>http://danboykis.com/2008/07/tailor-svn-to-hg/#comments</comments>
		<pubDate>Fri, 18 Jul 2008 14:57:00 +0000</pubDate>
		<dc:creator>dan</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://danboykis.com/2008/07/18/tailor-svn-to-hg/</guid>
		<description><![CDATA[I few weeks ago I discovered tailor. After installing the latest tarball. Following this tutorial I was able to checkout from a svn repository from work into my hg repo. I was not interested in pushing back changes, in my case the project ended, however it should be easy enough to do. I called my [...]]]></description>
			<content:encoded><![CDATA[<p>I few weeks ago I discovered <a href="http://wiki.darcs.net/Tailor">tailor</a>.  After installing the latest <a href="http://darcs.arstecnica.it/">tarball</a>. Following <a href="http://wiki.darcs.net/ConvertingFromSubversion" class="broken_link">this tutorial</a> I was able to checkout from a svn repository from work into my hg repo. I was not interested in pushing back changes, in my case the project ended, however it should be easy enough to do.</p>
<p>I called my config file: <span style="font-style: italic;">projectname.tailor</span></p>
<pre>
[svn-to-hg]
root-directory = /home/me/projectname
source = svn:projectname
target = hg:projectname
state-file = svn-to-hg.state

[svn:projectname]
repository = https://svnserver/svn/main/projectname
module = /trunk
subdir = svnside
trust-root = True

[hg:projectname]
repository = /home/me/projectname
subdir = hgside</pre>
<p>At the terminal:</p>
<pre> $ tailor --configfile=projectname.tailor svn-to-hg</pre>
<p>This will create two directories in <span style="font-style: italic;">/home/me/projectname/</span> <span style="font-style: italic;">hgside</span> and <span style="font-style: italic;">svnside</span>.</p>
]]></content:encoded>
			<wfw:commentRss>http://danboykis.com/2008/07/tailor-svn-to-hg/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
