<?xml version="1.0" encoding="utf-8" ?>
<rss version="2.0"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xml:lang="ja">
	<channel>
		<title>bulbのLisp日記</title>
		<link>http://cadr.g.hatena.ne.jp/drybulb/</link>
		<description>bulbのLisp日記</description>
		<dc:creator>drybulb</dc:creator>


		<item>
			<title>[PAIP][Chapter3]3.2</title>
			<link>http://cadr.g.hatena.ne.jp/drybulb/20080203/1202042278</link>

			<description><![CDATA[
		<div class="section">
			<p>3.2 Special Forms</p>
			<p>p.50-53</p>
			<p>3.1, 3.2は、Norvig先生からLispの書き方を教わっている感じですね。</p>
			<p>とてもためになります。</p>			<br>

			<p>Lispで構造体。</p>
<pre class="syntax-highlight">
<span class="synSpecial">(</span>defstrruct name
    <span class="synStatement">first</span>
  <span class="synSpecial">(</span>middle <span class="synStatement">nil</span><span class="synSpecial">)</span>
  <span class="synStatement">last</span><span class="synSpecial">)</span>

<span class="synSpecial">(</span><span class="synStatement">setf</span> b <span class="synSpecial">(</span>make-name :first <span class="synSpecial">'</span><span class="synIdentifier">Paul</span> :last <span class="synSpecial">'</span><span class="synIdentifier">Graham</span><span class="synSpecial">))</span>

<span class="synSpecial">(</span>name-first b<span class="synSpecial">)</span>
#<span class="synStatement">=</span>&amp;#<span class="synConstant">62</span><span class="synComment">; PAUL</span>

<span class="synSpecial">(</span>name-middle b<span class="synSpecial">)</span>
#<span class="synStatement">=</span>&amp;#<span class="synConstant">62</span><span class="synComment">; NIL</span>

<span class="synSpecial">(</span>name-last b<span class="synSpecial">)</span>
#<span class="synStatement">=</span>&amp;#<span class="synConstant">62</span><span class="synComment">; GRAHAM</span>

<span class="synSpecial">(</span>name-p b<span class="synSpecial">)</span>
#<span class="synStatement">=</span>&amp;#<span class="synConstant">62</span><span class="synComment">; T</span>

<span class="synSpecial">(</span>name-p <span class="synSpecial">'</span><span class="synIdentifier">Paul</span><span class="synSpecial">)</span>
#<span class="synStatement">=</span>&amp;#<span class="synConstant">62</span><span class="synComment">; NIL</span>

<span class="synSpecial">(</span><span class="synStatement">setf</span> <span class="synSpecial">(</span>name-middle b<span class="synSpecial">)</span> <span class="synSpecial">'</span><span class="synIdentifier">Q</span><span class="synSpecial">)</span>
#<span class="synStatement">=</span>&amp;#<span class="synConstant">62</span><span class="synComment">; Q</span>

b
#<span class="synStatement">=</span>&amp;#<span class="synConstant">62</span><span class="synComment">; #S(NAME :FIRST PAUL :MIDDLE Q :LAST GRAHAM)</span>


</pre>

		</div>
]]></description>

			<dc:creator>drybulb</dc:creator>

			<pubDate>Sun, 03 Feb 2008 12:37:58 GMT</pubDate>


			<category>PAIP</category>

			<category>Chapter3</category>


		</item>

		<item>
			<title>[PAIP][Chapter2]2.6</title>
			<link>http://cadr.g.hatena.ne.jp/drybulb/20080127/1201417284</link>

			<description><![CDATA[
		<div class="section">
<pre class="syntax-highlight">
<span class="synSpecial">(</span><span class="synStatement">defun</span> generate-tree <span class="synSpecial">(</span>phrase<span class="synSpecial">)</span>
  <span class="synConstant">&quot;Generate a random sentence or phrase,</span>
<span class="synConstant">with a complete parse tree.&quot;</span>
  <span class="synSpecial">(</span><span class="synStatement">cond</span> <span class="synSpecial">((</span><span class="synStatement">listp</span> phrase<span class="synSpecial">)</span>
	 <span class="synSpecial">(</span><span class="synStatement">mapcar</span> <span class="synType">#'generate-tree</span> phrase<span class="synSpecial">))</span>
	<span class="synSpecial">((</span>rewrites phrase<span class="synSpecial">)</span>
	 <span class="synSpecial">(</span><span class="synStatement">cons</span> phrase
	       <span class="synSpecial">(</span>generate-tree <span class="synSpecial">(</span>random-elt <span class="synSpecial">(</span>rewrites phrase<span class="synSpecial">)))))</span>
	<span class="synSpecial">(</span><span class="synStatement">t</span>
	 <span class="synSpecial">(</span><span class="synStatement">list</span> phrase<span class="synSpecial">))))</span>
<span class="synComment">#|</span>
<span class="synComment">CL-USER&amp;#62; (generate-tree 'Sentence)</span>
<span class="synComment">(SENTENCE (NOUN-PHRASE (NAME GUY))</span>
<span class="synComment">          (VERB-PHRASE (VERB LIKED) (NOUN-PHRASE (PRONOUN SHE)) (PP*)))</span>
<span class="synComment">CL-USER&amp;#62; (generate-tree 'Sentence)</span>
<span class="synComment">(SENTENCE (NOUN-PHRASE (PRONOUN HE))</span>
<span class="synComment">          (VERB-PHRASE (VERB HIT) (NOUN-PHRASE (PRONOUN SHE)) (PP*)))</span>
<span class="synComment">|#</span>

<span class="synSpecial">(</span><span class="synStatement">defun</span> generate-all <span class="synSpecial">(</span>phrase<span class="synSpecial">)</span>
  <span class="synConstant">&quot;Generate a list of all possible expansions of this phrase.&quot;</span>
  <span class="synSpecial">(</span><span class="synStatement">cond</span> <span class="synSpecial">((</span><span class="synStatement">null</span> phrase<span class="synSpecial">)</span> <span class="synSpecial">(</span><span class="synStatement">list</span> <span class="synStatement">nil</span><span class="synSpecial">))</span>
	<span class="synSpecial">((</span><span class="synStatement">listp</span> phrase<span class="synSpecial">)</span>
	 <span class="synSpecial">(</span>combine-all <span class="synSpecial">(</span>generate-all <span class="synSpecial">(</span><span class="synStatement">first</span> phrase<span class="synSpecial">))</span>
		      <span class="synSpecial">(</span>generate-all <span class="synSpecial">(</span><span class="synStatement">rest</span> phrase<span class="synSpecial">))))</span>
	<span class="synSpecial">((</span>rewrites phrase<span class="synSpecial">)</span>
	 <span class="synSpecial">(</span>mappend <span class="synType">#'generate-all</span> <span class="synSpecial">(</span>rewrites phrase<span class="synSpecial">)))</span>
	<span class="synSpecial">(</span><span class="synStatement">t</span> <span class="synSpecial">(</span><span class="synStatement">list</span> <span class="synSpecial">(</span><span class="synStatement">list</span> phrase<span class="synSpecial">)))</span>
	<span class="synSpecial">))</span>

<span class="synSpecial">(</span><span class="synStatement">defun</span> combine-all <span class="synSpecial">(</span>xlist ylist<span class="synSpecial">)</span>
  <span class="synConstant">&quot;Return a list of lists formed by appending a y to an x.</span>
<span class="synConstant">E.g., (combine-all '((a) (b)) '((1) (2)))</span>
<span class="synConstant">-&amp;#62; ((A 1) (B 1) (A 2) (B 2)).&quot;</span>
  <span class="synSpecial">(</span>mappend #<span class="synSpecial">'(</span><span class="synStatement">lambda</span> <span class="synSpecial">(</span>y<span class="synSpecial">)</span>
	       <span class="synSpecial">(</span><span class="synStatement">mapcar</span> #'<span class="synSpecial">(</span><span class="synStatement">lambda</span> <span class="synSpecial">(</span>x<span class="synSpecial">)</span> <span class="synSpecial">(</span><span class="synStatement">append</span> x y<span class="synSpecial">))</span> xlist<span class="synSpecial">))</span>
	   ylist<span class="synSpecial">))</span>

<span class="synSpecial">(</span>generate-all <span class="synSpecial">'</span><span class="synIdentifier">sentence</span><span class="synSpecial">)</span>


</pre>

			<p>generate-allはスタックが溢れてしまう。sbclとxyzzyで試したけど。なんか間違っている？</p>
		</div>
]]></description>

			<dc:creator>drybulb</dc:creator>

			<pubDate>Sun, 27 Jan 2008 07:01:24 GMT</pubDate>


			<category>PAIP</category>

			<category>Chapter2</category>


		</item>

		<item>
			<title>[PAIP][Chapter2][Exercise]2.4</title>
			<link>http://cadr.g.hatena.ne.jp/drybulb/20080127/1201417596</link>

			<description><![CDATA[
		<div class="section">
<pre class="syntax-highlight">
<span class="synSpecial">(</span><span class="synStatement">defun</span> cross-product <span class="synSpecial">(</span>fn xlist ylist<span class="synSpecial">)</span>
  <span class="synSpecial">(</span>mappend #<span class="synSpecial">'(</span><span class="synStatement">lambda</span> <span class="synSpecial">(</span>y<span class="synSpecial">)</span>
	       <span class="synSpecial">(</span><span class="synStatement">mapcar</span> #'<span class="synSpecial">(</span><span class="synStatement">lambda</span> <span class="synSpecial">(</span>x<span class="synSpecial">)</span> <span class="synSpecial">(</span><span class="synStatement">funcall</span> fn x y<span class="synSpecial">))</span>
		       xlist<span class="synSpecial">))</span>
	   ylist<span class="synSpecial">))</span>

<span class="synSpecial">(</span><span class="synStatement">defun</span> combine-all2 <span class="synSpecial">(</span>xlist ylist<span class="synSpecial">)</span>
  <span class="synSpecial">(</span>cross-product <span class="synType">#'append</span> xlist ylist<span class="synSpecial">))</span>

<span class="synComment">#|</span>
<span class="synComment">CL-USER&amp;#62; (cross-product #'+ '(1 2 3) '(10 20 30))</span>
<span class="synComment">(11 12 13 21 22 23 31 32 33)</span>
<span class="synComment">CL-USER&amp;#62; (cross-product #'* '(1 2 3) '(10 20 30))</span>
<span class="synComment">(10 20 30 20 40 60 30 60 90)</span>
<span class="synComment">CL-USER&amp;#62; (cross-product #'- '(1 2 3) '(10 20 30))</span>
<span class="synComment">(-9 -8 -7 -19 -18 -17 -29 -28 -27)</span>
<span class="synComment">CL-USER&amp;#62; (cross-product #'list '(a b c d e f g h)</span>
<span class="synComment">			'(1 2 3 4 5 6 7 8))</span>

<span class="synComment">((A 1) (B 1) (C 1) (D 1) (E 1) (F 1) (G 1) (H 1) (A 2) (B 2) (C 2) (D 2) (E 2)</span>
<span class="synComment"> (F 2) (G 2) (H 2) (A 3) (B 3) (C 3) (D 3) (E 3) (F 3) (G 3) (H 3) (A 4) (B 4)</span>
<span class="synComment"> (C 4) (D 4) (E 4) (F 4) (G 4) (H 4) (A 5) (B 5) (C 5) (D 5) (E 5) (F 5) (G 5)</span>
<span class="synComment"> (H 5) (A 6) (B 6) (C 6) (D 6) (E 6) (F 6) (G 6) (H 6) (A 7) (B 7) (C 7) (D 7)</span>
<span class="synComment"> (E 7) (F 7) (G 7) (H 7) (A 8) (B 8) (C 8) (D 8) (E 8) (F 8) (G 8) (H 8))</span>
<span class="synComment">|#</span>

</pre>

		</div>
]]></description>

			<dc:creator>drybulb</dc:creator>

			<pubDate>Sun, 27 Jan 2008 07:06:36 GMT</pubDate>


			<category>PAIP</category>

			<category>Chapter2</category>

			<category>Exercise</category>


		</item>

		<item>
			<title>[PAIP][Chapter3]3.1</title>
			<link>http://cadr.g.hatena.ne.jp/drybulb/20080127/1201439987</link>

			<description><![CDATA[
		<div class="section">
			<p>3.1 A Guide to Lisp Style</p>
			<p>p.48-50</p>
<pre class="syntax-highlight">
明確に書くこと。
抽象化しろ。
簡潔に書くこと。
すでにあるLisp関数を使うこと。
一貫性。
</pre>

			<p>まだAIまでたどり着いてないですが、</p>
			<p>この本は、Common Lispを学ぶには良いですよ。</p>
			<p>(英文も多分やさしい方だと思います)</p>
		</div>
]]></description>

			<dc:creator>drybulb</dc:creator>

			<pubDate>Sun, 27 Jan 2008 13:19:47 GMT</pubDate>


			<category>PAIP</category>

			<category>Chapter3</category>


		</item>

		<item>
			<title>[PAIP][Chapter2]</title>
			<link>http://cadr.g.hatena.ne.jp/drybulb/20080108/1199794964</link>

			<description><![CDATA[
		<div class="section">
			<p>前の関数generateは、(rewrites phrase) を2回使用していて冗長なため、</p>
			<p>次のように変更。</p>
			<p>ちなみに let を使用しますよ。</p>
<pre class="syntax-highlight">
<span class="synSpecial">(</span><span class="synStatement">defun</span> generate <span class="synSpecial">(</span>phrase<span class="synSpecial">)</span>
  <span class="synConstant">&quot;Generate a random sentence or phrase&quot;</span>
  <span class="synSpecial">(</span><span class="synStatement">if</span> <span class="synSpecial">(</span><span class="synStatement">listp</span> phrase<span class="synSpecial">)</span>
      <span class="synSpecial">(</span>mappend <span class="synType">#'generate</span> phrase<span class="synSpecial">)</span>
      <span class="synSpecial">(</span><span class="synStatement">let</span> <span class="synSpecial">((</span>choices <span class="synSpecial">(</span>rewrites phrase<span class="synSpecial">)))</span>
	<span class="synSpecial">(</span><span class="synStatement">if</span> <span class="synSpecial">(</span><span class="synStatement">null</span> choices<span class="synSpecial">)</span>
	    <span class="synSpecial">(</span><span class="synStatement">list</span> phrase<span class="synSpecial">)</span>
	    <span class="synSpecial">(</span>generate <span class="synSpecial">(</span>random-elt choices<span class="synSpecial">))))))</span>
<span class="synComment">#|</span>
<span class="synComment">CL-USER&amp;#62; (generate 'sentence)</span>
<span class="synComment">(A MAN LIKED THE TABLE)</span>
<span class="synComment">CL-USER&amp;#62; (generate 'sentence)</span>
<span class="synComment">(THE WOMAN TOOK THE BALL)</span>
<span class="synComment">CL-USER&amp;#62; (generate 'sentence)</span>
<span class="synComment">(A WOMAN SAW THE TABLE)</span>
<span class="synComment">|#</span>

<span class="synStatement">setf</span> を使用して代入なんかしちゃだめ。

</pre>

		</div>
]]></description>

			<dc:creator>drybulb</dc:creator>

			<pubDate>Tue, 08 Jan 2008 12:22:44 GMT</pubDate>


			<category>PAIP</category>

			<category>Chapter2</category>


		</item>

		<item>
			<title>[PAIP][Chapter2][Exercise]2.1</title>
			<link>http://cadr.g.hatena.ne.jp/drybulb/20080108/1199795371</link>

			<description><![CDATA[
		<div class="section">
			<p>generate を cond を使用して書きます。</p>
			<p>;; Exercise 2.1</p>
<pre class="syntax-highlight">
<span class="synSpecial">(</span><span class="synStatement">defun</span> generate <span class="synSpecial">(</span>phrase<span class="synSpecial">)</span>
  <span class="synSpecial">(</span><span class="synStatement">let</span> <span class="synSpecial">((</span>choices <span class="synStatement">nil</span><span class="synSpecial">))</span>
    <span class="synSpecial">(</span><span class="synStatement">cond</span> <span class="synSpecial">((</span><span class="synStatement">listp</span> phrase<span class="synSpecial">)</span>
	   <span class="synSpecial">(</span>mappend <span class="synType">#'generate</span> phrase<span class="synSpecial">))</span>
	  <span class="synSpecial">((</span><span class="synStatement">setf</span> choices <span class="synSpecial">(</span>rewrites phrase<span class="synSpecial">))</span>
	   <span class="synSpecial">(</span>generate <span class="synSpecial">(</span>random-elt choices<span class="synSpecial">)))</span>
	  <span class="synSpecial">(</span><span class="synStatement">t</span>
	   <span class="synSpecial">(</span><span class="synStatement">list</span> phrase<span class="synSpecial">)))))</span>
<span class="synComment">#|</span>
<span class="synComment">CL-USER&amp;#62; (generate 'sentence)</span>
<span class="synComment">(THE WOMAN HIT A TABLE)</span>
<span class="synComment">CL-USER&amp;#62; (generate 'sentence)</span>
<span class="synComment">(THE TABLE LIKED A MAN)</span>
<span class="synComment">|#</span>


</pre>

		</div>
]]></description>

			<dc:creator>drybulb</dc:creator>

			<pubDate>Tue, 08 Jan 2008 12:29:31 GMT</pubDate>


			<category>PAIP</category>

			<category>Chapter2</category>

			<category>Exercise</category>


		</item>

		<item>
			<title>[PAIP][Chapter2][Exercise]2.2</title>
			<link>http://cadr.g.hatena.ne.jp/drybulb/20080108/1199799952</link>

			<description><![CDATA[
		<div class="section">
			<p>いきなり意味がわからなかったため答えを見る。</p>
			<p>あぁ、明示的に終端と非終端を区別せよか。</p>
			<p>答えは以下。</p>
<pre class="syntax-highlight">
<span class="synSpecial">(</span><span class="synStatement">defun</span> generate <span class="synSpecial">(</span>phrase<span class="synSpecial">)</span>
  <span class="synSpecial">(</span><span class="synStatement">cond</span> <span class="synSpecial">((</span><span class="synStatement">listp</span> phrase<span class="synSpecial">)</span>
	 <span class="synSpecial">(</span>mappend <span class="synType">#'generate</span> phrase<span class="synSpecial">))</span>
	<span class="synSpecial">((</span>non-terminal-p phrase<span class="synSpecial">)</span>
	 <span class="synSpecial">(</span>generate <span class="synSpecial">(</span>random-elt <span class="synSpecial">(</span>rewrites phrase<span class="synSpecial">))))</span>
	<span class="synSpecial">(</span><span class="synStatement">t</span>
	 <span class="synSpecial">(</span><span class="synStatement">list</span> phrase<span class="synSpecial">))))</span>

<span class="synSpecial">(</span><span class="synStatement">defun</span> non-terminal-p <span class="synSpecial">(</span>category<span class="synSpecial">)</span>
  <span class="synSpecial">(</span><span class="synStatement">not</span> <span class="synSpecial">(</span><span class="synStatement">null</span> <span class="synSpecial">(</span>rewrites category<span class="synSpecial">))))</span>

<span class="synComment">#|</span>
<span class="synComment">CL-USER&amp;#62; (generate 'sentence)</span>
<span class="synComment">(THE WOMAN TOOK A WOMAN)</span>
<span class="synComment">CL-USER&amp;#62; (generate 'sentence)</span>
<span class="synComment">(A WOMAN HIT THE TABLE)</span>
<span class="synComment">|#</span>


</pre>

		</div>
]]></description>

			<dc:creator>drybulb</dc:creator>

			<pubDate>Tue, 08 Jan 2008 13:45:52 GMT</pubDate>


			<category>PAIP</category>

			<category>Chapter2</category>

			<category>Exercise</category>


		</item>

		<item>
			<title>[PAIP][Chapter2]2.5</title>
			<link>http://cadr.g.hatena.ne.jp/drybulb/20080108/1199799978</link>

			<description><![CDATA[
		<div class="section">
			<p>grammar を増やしますよ。</p>
<pre class="syntax-highlight">
<span class="synSpecial">(</span><span class="synStatement">defparameter</span> <span class="synType">*bigger-grammar*</span>
  <span class="synSpecial">'((</span>sentence <span class="synStatement">-</span>&amp;#62<span class="synComment">; (noun-phrase verb-phrase))</span>
    <span class="synSpecial">(</span>noun-phrase <span class="synStatement">-</span>&amp;#62<span class="synComment">; (Article Adj* Noun PP*) (Name) (Pronoun))</span>
    <span class="synSpecial">(</span>verb-phrase <span class="synStatement">-</span>&amp;#62<span class="synComment">; (Verb noun-phrase PP*))</span>
    <span class="synSpecial">(</span>PP* <span class="synStatement">-</span>&amp;#62<span class="synComment">; () (PP PP*))</span>
    <span class="synSpecial">(</span>Adj* <span class="synStatement">-</span>&amp;#62<span class="synComment">; () (Adj Adj*))</span>
    <span class="synSpecial">(</span>PP <span class="synStatement">-</span>&amp;#62<span class="synComment">; (Prep noun-phrase))</span>
    <span class="synSpecial">(</span>Prep <span class="synStatement">-</span>&amp;#62<span class="synComment">; to in by with on)</span>
    <span class="synSpecial">(</span>Adj <span class="synStatement">-</span>&amp;#62<span class="synComment">; big little bule green adiabatic)</span>
    <span class="synSpecial">(</span>Article <span class="synStatement">-</span>&amp;#62<span class="synComment">; the a)</span>
    <span class="synSpecial">(</span>Name <span class="synStatement">-</span>&amp;#62<span class="synComment">; Peter Paul Seibel Guy Steel)</span>
    <span class="synSpecial">(</span>Noun <span class="synStatement">-</span>&amp;#62<span class="synComment">; man ball woman table)</span>
    <span class="synSpecial">(</span>Verb <span class="synStatement">-</span>&amp;#62<span class="synComment">; hit took saw liked)</span>
    <span class="synSpecial">(</span>Pronoun <span class="synStatement">-</span>&amp;#62<span class="synComment">; he she it these those that)))</span>

<span class="synSpecial">(</span><span class="synStatement">setf</span> *grammar* *bigger-grammar*<span class="synSpecial">)</span>

#|
CL-USER&amp;#62<span class="synComment">; (generate 'sentence)</span>
<span class="synSpecial">(</span>THE ADIABATIC LITTLE GREEN WOMAN SAW THE MAN ON HE<span class="synSpecial">)</span>
CL-USER&amp;#62<span class="synComment">; (generate 'sentence)</span>
<span class="synSpecial">(</span>THE MAN TO A GREEN TABLE WITH STEEL ON A LITTLE MAN TO THE TABLE BY SEIBEL IN
     THAT TOOK THE ADIABATIC LITTLE TABLE IN SHE WITH A BULE GREEN WOMAN TO GUY
     BY PAUL ON STEEL<span class="synSpecial">)</span>
CL-USER&amp;#62<span class="synComment">; (generate 'sentence)</span>
<span class="synSpecial">(</span>PETER TOOK SHE<span class="synSpecial">)</span>
|#


</pre>

			<p>英文の結果がまだ変ですね。</p>
			<p>でもこれがAIへの入り口？</p>
		</div>
]]></description>

			<dc:creator>drybulb</dc:creator>

			<pubDate>Tue, 08 Jan 2008 13:46:18 GMT</pubDate>


			<category>PAIP</category>

			<category>Chapter2</category>


		</item>

		<item>
			<title>[PAIP]</title>
			<link>http://cadr.g.hatena.ne.jp/drybulb/20080106/1199614842</link>

			<description><![CDATA[
		<div class="section">
			<p>PAIPをちょっぴり予習?</p>
			<p>Chapter1-3:INTRODUCTION TO COMMON LISP</p>
			<p>Chapter4-8:EARLY AI PROGRAMS この章からAIに突入。</p>
			<p>Chapter9-14:TOOLS AND TECHNIQUES</p>
			<p>Chapter15-21:ADVANCED AI PROGRAMS</p>
			<p>Chapter22-25:THE REST OF LISP</p>
			<p>全900ページ!!</p>
			<p>ソースはすべて公開されています。</p>
			<p><a href="http://norvig.com/paip/README.html" target="_blank">http://norvig.com/paip/README.html</a></p>			<br>

			<p>とりあえず、写経しながら進めていく予定です。</p>
			<p>(ここは書きかけです。間違っているかもしれません)</p>
		</div>
]]></description>

			<dc:creator>drybulb</dc:creator>

			<pubDate>Sun, 06 Jan 2008 10:20:42 GMT</pubDate>


			<category>PAIP</category>


		</item>

		<item>
			<title>[PAIP][Chapter2]英文生成Lisp</title>
			<link>http://cadr.g.hatena.ne.jp/drybulb/20080106/1199616062</link>

			<description><![CDATA[
		<div class="section">
			<p>Chapter1は、Common Lisp初心者用らしいですので、とりあえず飛ばしていきます。</p>
			<p>英文生成</p>
			<p>こんなルール</p>
			<p>Sentence =&gt; Noun-Phrase + Verb-Phrase</p>
			<p>Noun-Phrase =&gt; Article + Noun</p>
			<p>Verb-Phrase =&gt; Verb + Noun-Phrase</p>
			<p>Article =&gt; the, a, ...</p>
			<p>Noun =&gt; man, ball, ...</p>
			<p>Verb =&gt; hit, took, saw, ...</p>
<pre class="syntax-highlight">

<span class="synSpecial">(</span><span class="synStatement">defun</span> sentence <span class="synSpecial">()</span> 
  <span class="synSpecial">(</span><span class="synStatement">append</span> <span class="synSpecial">(</span>noun-phrase<span class="synSpecial">)</span> <span class="synSpecial">(</span>verb-phrase<span class="synSpecial">)))</span>
<span class="synSpecial">(</span><span class="synStatement">defun</span> noun-phrase <span class="synSpecial">()</span>
  <span class="synSpecial">(</span><span class="synStatement">append</span> <span class="synSpecial">(</span>Article<span class="synSpecial">)</span> <span class="synSpecial">(</span>Noun<span class="synSpecial">)))</span>
<span class="synSpecial">(</span><span class="synStatement">defun</span> verb-phrase <span class="synSpecial">()</span>
  <span class="synSpecial">(</span><span class="synStatement">append</span> <span class="synSpecial">(</span>Verb<span class="synSpecial">)</span> <span class="synSpecial">(</span>noun-phrase<span class="synSpecial">)))</span>
<span class="synSpecial">(</span><span class="synStatement">defun</span> Article <span class="synSpecial">()</span>
  <span class="synSpecial">(</span>one-of <span class="synSpecial">'(</span><span class="synStatement">the</span> a<span class="synSpecial">)))</span>
<span class="synSpecial">(</span><span class="synStatement">defun</span> Noun <span class="synSpecial">()</span>
  <span class="synSpecial">(</span>one-of <span class="synSpecial">'(</span>man ball woman table<span class="synSpecial">)))</span>
<span class="synSpecial">(</span><span class="synStatement">defun</span> Verb <span class="synSpecial">()</span>
  <span class="synSpecial">(</span>one-of <span class="synSpecial">'(</span>hit took saw liked<span class="synSpecial">)))</span>
<span class="synSpecial">(</span><span class="synStatement">defun</span> one-of <span class="synSpecial">(</span><span class="synStatement">set</span><span class="synSpecial">)</span>
  <span class="synConstant">&quot;Pick one element of set, and make a list of it.&quot;</span>
  <span class="synSpecial">(</span><span class="synStatement">list</span> <span class="synSpecial">(</span>random-elt <span class="synStatement">set</span><span class="synSpecial">)))</span>
<span class="synSpecial">(</span><span class="synStatement">defun</span> random-elt <span class="synSpecial">(</span>choices<span class="synSpecial">)</span>
  <span class="synConstant">&quot;Choose an element from a list at random.&quot;</span>
  <span class="synSpecial">(</span><span class="synStatement">elt</span> choices <span class="synSpecial">(</span><span class="synStatement">random</span> <span class="synSpecial">(</span><span class="synStatement">length</span> choices<span class="synSpecial">))))</span>

</pre>

			<p>ちなみに環境は、CarbonEmacs + SLIME + SBCL です。</p>
<pre class="syntax-highlight">
CL-USER&amp;#<span class="synConstant">62</span><span class="synComment">; (sentence)</span>
<span class="synSpecial">(</span>THE BALL TOOK A BALL<span class="synSpecial">)</span>
CL-USER&amp;#<span class="synConstant">62</span><span class="synComment">; (sentence)</span>
<span class="synSpecial">(</span>THE BALL HIT THE MAN<span class="synSpecial">)</span>
CL-USER&amp;#<span class="synConstant">62</span><span class="synComment">; (sentence)</span>
<span class="synSpecial">(</span>THE MAN LIKED THE WOMAN<span class="synSpecial">)</span>
CL-USER&amp;#<span class="synConstant">62</span><span class="synComment">; (sentence)</span>
<span class="synSpecial">(</span>A BALL HIT THE MAN<span class="synSpecial">)</span>
CL-USER&amp;#<span class="synConstant">62</span><span class="synComment">; (noun-phrase)</span>
<span class="synSpecial">(</span>THE MAN<span class="synSpecial">)</span>
CL-USER&amp;#<span class="synConstant">62</span><span class="synComment">; (verb-phrase)</span>
<span class="synSpecial">(</span>SAW THE TABLE<span class="synSpecial">)</span>

</pre>

			<p>traceにかけてみる。</p>
<pre class="syntax-highlight">
CL-USER&amp;#<span class="synConstant">62</span><span class="synComment">; (trace sentence noun-phrase verb-phrase article noun verb)</span>
<span class="synSpecial">(</span>SENTENCE NOUN-PHRASE VERB-PHRASE ARTICLE NOUN VERB<span class="synSpecial">)</span>
CL-USER&amp;#<span class="synConstant">62</span><span class="synComment">; (sentence)</span>
  <span class="synConstant">0</span>: <span class="synSpecial">(</span>SENTENCE<span class="synSpecial">)</span>
    <span class="synConstant">1</span>: <span class="synSpecial">(</span>NOUN-PHRASE<span class="synSpecial">)</span>
      <span class="synConstant">2</span>: <span class="synSpecial">(</span>ARTICLE<span class="synSpecial">)</span>
      <span class="synConstant">2</span>: ARTICLE returned <span class="synSpecial">(</span>THE<span class="synSpecial">)</span>
      <span class="synConstant">2</span>: <span class="synSpecial">(</span>NOUN<span class="synSpecial">)</span>
      <span class="synConstant">2</span>: NOUN returned <span class="synSpecial">(</span>BALL<span class="synSpecial">)</span>
    <span class="synConstant">1</span>: NOUN-PHRASE returned <span class="synSpecial">(</span>THE BALL<span class="synSpecial">)</span>
    <span class="synConstant">1</span>: <span class="synSpecial">(</span>VERB-PHRASE<span class="synSpecial">)</span>
      <span class="synConstant">2</span>: <span class="synSpecial">(</span>VERB<span class="synSpecial">)</span>
      <span class="synConstant">2</span>: VERB returned <span class="synSpecial">(</span>SAW<span class="synSpecial">)</span>
      <span class="synConstant">2</span>: <span class="synSpecial">(</span>NOUN-PHRASE<span class="synSpecial">)</span>
        <span class="synConstant">3</span>: <span class="synSpecial">(</span>ARTICLE<span class="synSpecial">)</span>
        <span class="synConstant">3</span>: ARTICLE returned <span class="synSpecial">(</span>THE<span class="synSpecial">)</span>
        <span class="synConstant">3</span>: <span class="synSpecial">(</span>NOUN<span class="synSpecial">)</span>
        <span class="synConstant">3</span>: NOUN returned <span class="synSpecial">(</span>BALL<span class="synSpecial">)</span>
      <span class="synConstant">2</span>: NOUN-PHRASE returned <span class="synSpecial">(</span>THE BALL<span class="synSpecial">)</span>
    <span class="synConstant">1</span>: VERB-PHRASE returned <span class="synSpecial">(</span>SAW THE BALL<span class="synSpecial">)</span>
  <span class="synConstant">0</span>: SENTENCE returned <span class="synSpecial">(</span>THE BALL SAW THE BALL<span class="synSpecial">)</span>
<span class="synSpecial">(</span>THE BALL SAW THE BALL<span class="synSpecial">)</span>

</pre>

			<p>ルールを追加。</p>
			<p>Noun-Phrase =&gt; Article+Adj*+Noun+PP*</p>
			<p>Adj* =&gt; 0,Adj+Adj*</p>
			<p>PP* =&gt; 0,PP+PP*</p>
			<p>PP =&gt; Prep+Noun-Phrase</p>
			<p>Adj =&gt; big,litle,red, ...</p>
			<p>Prep =&gt; to,in,on,by, ...</p>
<pre class="syntax-highlight">
<span class="synSpecial">(</span><span class="synStatement">defun</span> Adj* <span class="synSpecial">()</span>
  <span class="synSpecial">(</span><span class="synStatement">if</span> <span class="synSpecial">(</span><span class="synStatement">=</span> <span class="synSpecial">(</span><span class="synStatement">random</span> <span class="synConstant">2</span><span class="synSpecial">)</span> <span class="synConstant">0</span><span class="synSpecial">)</span>
      <span class="synStatement">nil</span>
      <span class="synSpecial">(</span><span class="synStatement">append</span> <span class="synSpecial">(</span>Adj<span class="synSpecial">)</span> <span class="synSpecial">(</span>Adj*<span class="synSpecial">))))</span>
<span class="synSpecial">(</span><span class="synStatement">defun</span> PP* <span class="synSpecial">()</span>
  <span class="synSpecial">(</span><span class="synStatement">if</span> <span class="synSpecial">(</span>random-elt <span class="synSpecial">'(</span><span class="synStatement">t</span> <span class="synStatement">nil</span><span class="synSpecial">))</span>
      <span class="synSpecial">(</span><span class="synStatement">append</span> <span class="synSpecial">(</span>PP<span class="synSpecial">)</span> <span class="synSpecial">(</span>PP*<span class="synSpecial">))</span>
      <span class="synStatement">nil</span><span class="synSpecial">))</span>
<span class="synSpecial">(</span><span class="synStatement">defun</span> noun-phrase <span class="synSpecial">()</span> <span class="synSpecial">(</span><span class="synStatement">append</span> <span class="synSpecial">(</span>Article<span class="synSpecial">)</span> <span class="synSpecial">(</span>Adj*<span class="synSpecial">)</span> <span class="synSpecial">(</span>Noun<span class="synSpecial">)</span> <span class="synSpecial">(</span>PP*<span class="synSpecial">)))</span>
<span class="synSpecial">(</span><span class="synStatement">defun</span> PP <span class="synSpecial">()</span> <span class="synSpecial">(</span><span class="synStatement">append</span> <span class="synSpecial">(</span>Prep<span class="synSpecial">)</span> <span class="synSpecial">(</span>noun-phrase<span class="synSpecial">)))</span>
<span class="synSpecial">(</span><span class="synStatement">defun</span> Adj <span class="synSpecial">()</span> <span class="synSpecial">(</span>one-of <span class="synSpecial">'(</span>big little blue green adiabatic<span class="synSpecial">)))</span>
<span class="synSpecial">(</span><span class="synStatement">defun</span> Prep <span class="synSpecial">()</span> <span class="synSpecial">(</span>one-of <span class="synSpecial">'(</span>to in by with on<span class="synSpecial">)))</span>

</pre>

<pre class="syntax-highlight">
CL-USER&amp;#<span class="synConstant">62</span><span class="synComment">; (untrace sentence noun-phrase verb-phrase article noun verb)</span>
T
CL-USER&amp;#<span class="synConstant">62</span><span class="synComment">; (sentence)</span>
<span class="synSpecial">(</span>A LITTLE BLUE MAN HIT A TABLE IN A WOMAN BY A TABLE WITH A MAN ON THE BIG
 ADIABATIC MAN IN THE MAN<span class="synSpecial">)</span>

</pre>

			<p>adiabatic:断熱の</p>
		</div>
]]></description>

			<dc:creator>drybulb</dc:creator>

			<pubDate>Sun, 06 Jan 2008 10:41:02 GMT</pubDate>


			<category>PAIP</category>

			<category>Chapter2</category>


		</item>

		<item>
			<title>[PAIP][Chapter2]A Rule-Based Solution</title>
			<link>http://cadr.g.hatena.ne.jp/drybulb/20080106/1199619411</link>

			<description><![CDATA[
		<div class="section">
			<p>Sentence =&gt; Noun-Phrase+Verb-Phrase</p>
			<p>Noun-Phrase=&gt;Article+Noun</p>
			<p>Verb-Phrase =&gt; Verb+Noun-Phrase</p>
			<p>Article =&gt; the, a, ...</p>
			<p>Noun =&gt; man, ball, woman, table ...</p>
			<p>Verb =&gt; hit, took, saw, liked ...</p>
			<p>上記をLispで表現すると、</p>
<pre class="syntax-highlight">
<span class="synSpecial">(</span><span class="synStatement">defparameter</span> <span class="synType">*simple-grammar*</span>
  <span class="synSpecial">'((</span>sentence <span class="synStatement">-</span>&amp;#62<span class="synComment">; (noun-phrase verb-phrase))</span>
    <span class="synSpecial">(</span>noun-phrase <span class="synStatement">-</span>&amp;#62<span class="synComment">; (Article Noun))</span>
    <span class="synSpecial">(</span>verb-phrase <span class="synStatement">-</span>&amp;#62<span class="synComment">; (Verb noun-phrase))</span>
    <span class="synSpecial">(</span>Article <span class="synStatement">-</span>&amp;#62<span class="synComment">; the a)</span>
    <span class="synSpecial">(</span>Noun <span class="synStatement">-</span>&amp;#62<span class="synComment">; man ball woman table)</span>
    <span class="synSpecial">(</span>Verb <span class="synStatement">-</span>&amp;#62<span class="synComment">; hit took saw liked))</span>
  <span class="synConstant">&quot;A grammar for a trivial subset of English.&quot;</span><span class="synSpecial">)</span>

<span class="synSpecial">(</span><span class="synStatement">defvar</span> *grammar* *simple-grammar*
  <span class="synConstant">&quot;The grammar used by generate.  Initially, this is</span>
<span class="synConstant">*simple-grammar*, but we can switch to other grammars.&quot;</span><span class="synSpecial">)</span>

CL-USER&amp;#62<span class="synComment">; (assoc 'noun *grammar*)</span>
<span class="synSpecial">(</span>NOUN <span class="synStatement">-</span>&amp;#62<span class="synComment">; MAN BALL WOMAN TABLE)</span>


</pre>

<pre class="syntax-highlight">
<span class="synSpecial">(</span><span class="synStatement">defun</span> rule-lhs <span class="synSpecial">(</span>rule<span class="synSpecial">)</span>
  <span class="synConstant">&quot;The left-hand side of a rule.&quot;</span>
  <span class="synSpecial">(</span><span class="synStatement">first</span> rule<span class="synSpecial">))</span>
<span class="synSpecial">(</span><span class="synStatement">defun</span> rule-rhs <span class="synSpecial">(</span>rule<span class="synSpecial">)</span>
  <span class="synConstant">&quot;The right-hand side of a rule.&quot;</span>
  <span class="synSpecial">(</span><span class="synStatement">rest</span> <span class="synSpecial">(</span><span class="synStatement">rest</span> rule<span class="synSpecial">)))</span>
<span class="synSpecial">(</span><span class="synStatement">defun</span> rewrites <span class="synSpecial">(</span>category<span class="synSpecial">)</span>
  <span class="synConstant">&quot;Return a list of the possible rewrites for this category.&quot;</span>
  <span class="synSpecial">(</span>rule-rhs <span class="synSpecial">(</span><span class="synStatement">assoc</span> category <span class="synType">*grammar*</span><span class="synSpecial">)))</span>
<span class="synSpecial">(</span><span class="synStatement">defun</span> generate <span class="synSpecial">(</span>phrase<span class="synSpecial">)</span>
  <span class="synConstant">&quot;Generate a random sentence or phrase&quot;</span>
  <span class="synSpecial">(</span><span class="synStatement">cond</span> <span class="synSpecial">((</span><span class="synStatement">listp</span> phrase<span class="synSpecial">)</span>
	 <span class="synSpecial">(</span>mappend <span class="synType">#'generate</span> phrase<span class="synSpecial">))</span>
	<span class="synSpecial">((</span>rewrites phrase<span class="synSpecial">)</span>
	 <span class="synSpecial">(</span>generate <span class="synSpecial">(</span>random-elt <span class="synSpecial">(</span>rewrites phrase<span class="synSpecial">))))</span>
	<span class="synSpecial">(</span><span class="synStatement">t</span>
	 <span class="synSpecial">(</span><span class="synStatement">list</span> phrase<span class="synSpecial">))))</span>
CL-USER&amp;#<span class="synConstant">62</span><span class="synComment">; (generate 'sentence)</span>
<span class="synSpecial">(</span>THE MAN TOOK A WOMAN<span class="synSpecial">)</span>
CL-USER&amp;#<span class="synConstant">62</span><span class="synComment">; (generate 'sentence)</span>
<span class="synSpecial">(</span>THE MAN SAW THE MAN<span class="synSpecial">)</span>


</pre>

		</div>
]]></description>

			<dc:creator>drybulb</dc:creator>

			<pubDate>Sun, 06 Jan 2008 11:36:51 GMT</pubDate>


			<category>PAIP</category>

			<category>Chapter2</category>


		</item>

		<item>
			<title>文字化け</title>
			<link>http://cadr.g.hatena.ne.jp/drybulb/20080106/1199614846</link>

			<description><![CDATA[
		<div class="section">
			<p>carbon emacs + simple-hatena-mode なんですが、</p>
			<p>文字化けするなぁ。</p>
			<p>utf-8m-dos</p>
			<p>にするとうまくできた。</p>
		</div>
]]></description>

			<dc:creator>drybulb</dc:creator>

			<pubDate>Sun, 06 Jan 2008 10:20:46 GMT</pubDate>



		</item>

	</channel>
</rss>

