<?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>Tordek &#187; dormir</title>
	<atom:link href="http://blog.tordek.com.ar/tag/dormir/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.tordek.com.ar</link>
	<description>Linux, Programación, Diseño Web, y todo lo bueno de la Internet.</description>
	<lastBuildDate>Sun, 10 Jul 2011 12:51:09 +0000</lastBuildDate>
	<language>es</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.2</generator>
		<item>
		<title>Odio a mi cerebro</title>
		<link>http://blog.tordek.com.ar/2008/04/odio-a-mi-cerebro/</link>
		<comments>http://blog.tordek.com.ar/2008/04/odio-a-mi-cerebro/#comments</comments>
		<pubDate>Mon, 14 Apr 2008 22:09:13 +0000</pubDate>
		<dc:creator>Tordek</dc:creator>
				<category><![CDATA[Programación]]></category>
		<category><![CDATA[Tordek]]></category>
		<category><![CDATA[codigo]]></category>
		<category><![CDATA[dormir]]></category>
		<category><![CDATA[lisp]]></category>
		<category><![CDATA[pensar]]></category>
		<category><![CDATA[trie]]></category>

		<guid isPermaLink="false">http://blog.tordek.com.ar/?p=154</guid>
		<description><![CDATA[Cuando estoy de lo más tranquilo, navegando, tarde a la noche, y encuentro un problema interesante, no me deja dormirme hasta que lo resuelvo&#8230; Se me ocurrió una forma de hacer tries en Lisp, y aunque lo anoté para resolverlo cuando me despierte, no me podía dormir. Es feo, pero funciona: (defun find-son (tree key) [...]]]></description>
			<content:encoded><![CDATA[<p>Cuando estoy de lo más tranquilo, navegando, tarde a la noche, y encuentro un problema interesante, no me deja dormirme hasta que lo resuelvo&#8230;</p>
<p>Se me ocurrió una forma de hacer tries en Lisp, y aunque lo anoté para resolverlo cuando me despierte, no me podía dormir.</p>
<p>Es feo, pero funciona:</p>
<pre lang="lisp">(defun find-son (tree key)
  (car (remove-if-not (lambda (x) (equal key (car x)))
                                 (cdr tree))))

(defun list-to-trie-helper (tree list)
  (unless (null list)
    (let* ((branch (find-son tree (cadr list)))
           (result (or (remove branch tree)
                       (list (car list)))))
      (append result
              (list (list-to-trie-helper
                        branch (cdr list)))))))

(defun list-to-trie (tree list)
  (list-to-trie-helper tree (cons _ list)))</pre>
<p>Toma una lista (se supone que lo haga con strings, pero bueno&#8230;) y la transforma en un trie, con <code>_</code> como nodo raíz, y los <code>nil</code> indican terminales.</p>
<p>Si agrego <code>(T O R D E K)</code>, <code>(P R O G R A M A)</code> y <code>(P R O G R A M A C I O N)</code> a un árbol, me devolverá</p>
<pre lang="lisp">(_
 (T (O (R (D (E (K NIL))))))
 (P (R (O (G (R (A (M (A NIL
                       (C (I (O (N NIL)))))))))))))</pre>
<p>Ahora, si me disculpan, tengo que dormir.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.tordek.com.ar/2008/04/odio-a-mi-cerebro/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
	</channel>
</rss>

