<?xml version="1.0" encoding="UTF-8" ?>
<rss version="0.91">
	<channel>
		<title>＊「ふっかつのじゅもんがちがいます。」</title>
		<description>Buzzurlの中の人日記</description>
		<link>http://blog.ajiyoshi.org/</link>
		<language>ja</language>
		<copyright>Copyright (C) 2005-2008 SAMURAI-FACTORY ALL RIGHTS RESERVED.</copyright>

		<item>
			<title>Javaにvariant型を実装した</title>
			<description>&lt;p&gt;最近Hadoopを使うために5～6年ぶりにJavaをいじっています。&lt;/p&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;p&gt;そんで、ちょっとばかり耐えがたいわけです。&lt;/p&gt;&lt;br /&gt;
&lt;p&gt;例えばありがちな例題を挙げると、&lt;/p&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;blockquote&gt;&lt;br /&gt;
&lt;p&gt;[&quot;google&quot;, &quot;検索エンジン&quot;,&quot;開発&quot;]のようなタグ(文字列)のリスト(でも配列でもなんでもいい)を受け取って&lt;/p&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;code&gt;&lt;pre&gt;&lt;br /&gt;
[&lt;br /&gt;
 {tag=&gt;&quot;google&quot;, enc=&gt;&quot;google&quot;},&lt;br /&gt;
 {tag=&gt;&quot;検索エンジン&quot;, enc=&gt;&quot;%E6%A4%9C%E7%B4%A2%E3%82%A8%E3%83%B3%E3%82%B8%E3%83%B3&quot;},&lt;br /&gt;
 {tag=&gt;&quot;開発&quot;, enc=&gt;&quot;%E9%96%8B%E7%99%BA&quot;}&lt;br /&gt;
]&lt;br /&gt;
&lt;/pre&gt;&lt;/code&gt;&lt;br /&gt;
&lt;p&gt;のようなハッシュテーブルのリストに変換しなさい。&lt;/p&gt;&lt;br /&gt;
&lt;p&gt;ただしパーセントエンコーディングを行う関数(でもメソッドでもなんでもいい) uri_encodingは与えられているものとする。&lt;/p&gt;&lt;br /&gt;
&lt;/blockquote&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;p&gt;こんなこと、Webアプリケーションではよくやるじゃないですか。&lt;/p&gt;&lt;br /&gt;
&lt;p&gt;んで、実際Perlなんかでは結構簡単に書けて&lt;/p&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;code&gt;&lt;pre&gt;&lt;br /&gt;
my @tags;&lt;br /&gt;
#@tags : (&quot;google&quot;, &quot;検索エンジン&quot;,&quot;開発&quot;) はモデルとかから取得&lt;br /&gt;
&lt;br /&gt;
my @ret = map{ { tag=&gt;$_,enc=&gt;uri_encoding($_) } } @tags;&lt;br /&gt;
&lt;/pre&gt;&lt;/code&gt;&lt;br /&gt;
&lt;p&gt;まあこんな感じじゃないですか。&lt;/p&gt;&lt;br /&gt;
&lt;p&gt;これをJavaで書くとこんなんなります。&lt;/p&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;code&gt;&lt;pre&gt;&lt;br /&gt;
List&amp;lt;String&amp;gt; tags;&lt;br /&gt;
//tags の中身はモデルとかから取得&lt;br /&gt;
&lt;br /&gt;
List&amp;lt;Map&amp;lt;String,String&amp;gt;&amp;gt; result = new LinkedList&amp;lt;Map&amp;lt;String,String&amp;gt;&amp;gt;();&lt;br /&gt;
Iterator&amp;lt;String&amp;gt; i = tags.iterator();&lt;br /&gt;
while(i.hasNext()){&lt;br /&gt;
    String tag = i.next();&lt;br /&gt;
    Map&amp;lt;String,String&amp;gt; m = new HashMap&amp;lt;String,String&amp;gt;();&lt;br /&gt;
    m.put(&quot;tag&quot;, tag);&lt;br /&gt;
    m.put(&quot;enc&quot;, uri_encode(tag));&lt;br /&gt;
    result.add(m);&lt;br /&gt;
}&lt;br /&gt;
&lt;/pre&gt;&lt;/code&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;p&gt;こんなにも・・！！こんなにも苦しいのならば型などいらぬ！！&lt;/p&gt;&lt;br /&gt;
&lt;p&gt;&lt;img src=&quot;http://file.blog.ajiyoshi.org/Img/1205673600/&quot; border=&quot;0&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;&lt;br /&gt;
&lt;p&gt;とか暗黒面に落ちそうになってしまいました。&lt;/p&gt;&lt;br /&gt;
&lt;br /&gt;&lt;br /&gt;
&lt;p&gt;これ以外にもWebアプリケーションなんかだとクエリーが全部文字列で来るけど、妥当性検証のためにintに変換してintと比較とかするのもJavaだとクソ面倒です。（例えば今表示している0件目ページの次の100件を表示するためにoffset=100とかをGETパラメタで受け取るとかそういう場合。こういうのはフレームワークが吸収してくれるんでしょうか？)&lt;/p&gt;&lt;br /&gt;
&lt;br /&gt;&lt;br /&gt;
&lt;p&gt;そんで、Javaのリハビリとしてバリアント型を作ってみました。&lt;/p&gt;&lt;br /&gt;
&lt;p&gt;どうせWebアプリケーションのコントローラとかHadoopでやるようなテキスト処理だと、使う型はせいぜい文字列、整数、日付、リスト、ハッシュおよびそれらの組み合わせと相互変換なわけです。&lt;/p&gt;&lt;br /&gt;
&lt;p&gt;こういう簡単なことは簡単に書けるように、これらを全部つっこめるvarクラスを作って、例えばさっきの問題ならこんな風に書けるようにするのがゴールです。(lambdaはファンクタのための抽象クラス、$はhashとかmapとかの関数的なクラスメソッドを入れておくためのクラス。)&lt;/p&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;code&gt;&lt;pre&gt;&lt;br /&gt;
var tags = $.list(&quot;Google&quot;, &quot;検索エンジン&quot;, &quot;開発&quot;);&lt;br /&gt;
lambda tag2hash = new lambda(){var f(var tag){&lt;br /&gt;
  return $.hash( &quot;tag&quot;, tag, &quot;enc&quot;, uri_encode(tag) );&lt;br /&gt;
}};&lt;br /&gt;
var result = $.map(tag2hash, tags);&lt;br /&gt;
&lt;/pre&gt;&lt;/code&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;p&gt;んで、書いたのが&lt;a href=&quot;http://file.blog.ajiyoshi.org/var.java&quot;&gt;コレ(var.java)&lt;/a&gt;。&lt;/p&gt;&lt;br /&gt;
&lt;p&gt;1ファイルにまとめるために無理やりpublicじゃない内部クラスを大量に使ってますが気にしないでください。&lt;/p&gt;&lt;br /&gt;
&lt;p&gt;varクラス(クラス名が大文字で始まらないけど勘弁してねｗ)にmainついてますが、もうJavaソースには見えませんｗ&lt;/p&gt;&lt;br /&gt;
&lt;p&gt;JavaでhackするというよりJavaをFxxkしてる気分になりました。&lt;/p&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;code&gt;&lt;pre&gt;&lt;br /&gt;
public class var {&lt;br /&gt;
    public static void main(String[] args){&lt;br /&gt;
        lambda square = new lambda(){var f(var v){&lt;br /&gt;
            return new $(v.i() * v.i());&lt;br /&gt;
        }};&lt;br /&gt;
        lambda say = new lambda(){var f(var v){&lt;br /&gt;
            System.out.println(v.display());&lt;br /&gt;
            return var.NIL;&lt;br /&gt;
        }};&lt;br /&gt;
&lt;br /&gt;
        //文字列&lt;br /&gt;
        var name = new $(&quot;James&quot;);&lt;br /&gt;
        say.apply(name);&lt;br /&gt;
&lt;br /&gt;
        //文字列と数値の混合リスト&lt;br /&gt;
        var ls = $.list(1, &quot;2&quot;, 3, 4, 5);&lt;br /&gt;
        //リストの各要素を2乗したリストを返す(数値は自動変換)&lt;br /&gt;
        say.apply($.map(square, ls));&lt;br /&gt;
        //cdr(笑)&lt;br /&gt;
        say.apply(ls.cdr());&lt;br /&gt;
&lt;br /&gt;
        //入れ子のハッシュテーブル&lt;br /&gt;
        var hash = $.hash(&lt;br /&gt;
          &quot;John&quot;, $.hash(&quot;sex&quot;, &quot;male&quot;, &quot;age&quot;, 20),&lt;br /&gt;
          &quot;Eva&quot;,  $.hash(&quot;sex&quot;, &quot;female&quot;, &quot;age&quot;, &quot;unknown&quot;),&lt;br /&gt;
          &quot;Abe&quot;,  $.hash(&quot;sex&quot;, &quot;unknown&quot;, &quot;age&quot;, &quot;25&quot;)&lt;br /&gt;
          );&lt;br /&gt;
        say.apply(hash.get(&quot;John&quot;).get(&quot;sex&quot;));&lt;br /&gt;
        say.apply(hash.get(&quot;Nobita&quot;).get(&quot;sex&quot;));&lt;br /&gt;
        say.apply(hash.keys());&lt;br /&gt;
        say.apply(hash);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;/pre&gt;&lt;/code&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;p&gt;このmainを実行するとこんな感じ。&lt;/p&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;code&gt;&lt;pre&gt;&lt;br /&gt;
$ java variant/var&lt;br /&gt;
&quot;James&quot;&lt;br /&gt;
(1 4 9 16 25)&lt;br /&gt;
(&quot;2&quot; 3 4 5)&lt;br /&gt;
&quot;male&quot;&lt;br /&gt;
nil&lt;br /&gt;
(&quot;John&quot; &quot;Abe&quot; &quot;Eva&quot;)&lt;br /&gt;
((&quot;John&quot; =&gt; ((&quot;age&quot; =&gt; 20)(&quot;sex&quot; =&gt; &quot;male&quot;)))(&quot;Abe&quot; =&gt; ((&quot;age&quot; =&gt; &quot;25&quot;)(&quot;sex&quot; =&gt; &quot;unknown&quot;)))(&quot;Eva&quot; =&gt; ((&quot;age&quot; =&gt; &quot;unknown&quot;)(&quot;sex&quot; =&gt; &quot;female&quot;))))&lt;br /&gt;
&lt;/pre&gt;&lt;/code&gt;&lt;br /&gt;
</description> 
			<link>http://blog.ajiyoshi.org/Entry/281/</link> 
		</item>
		<item>
			<title>HUNTER×HUNTER</title>
			<description>&lt;p&gt;会社に来るついでにHxH25巻を買って読んだ。&lt;/p&gt;&lt;br /&gt;
&lt;p&gt;もちろんジャンプ本誌でも読んでる、どころか各週3回は読み直したのになんでこんなに面白いのか。&lt;/p&gt;&lt;br /&gt;
&lt;p&gt;あまりに面白いのでなんか電車の中で涙ぐんでしまった。はたからみたらキモかったと思う。別にオチはないけどおまえらもっとHxHを読むといいと思いました。&lt;p&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;H4&gt;&lt;A href=&quot;http://www.amazon.co.jp/exec/obidos/redirect?link_code=as2&amp;amp;path=ASIN/4088745353&amp;amp;tag=ajiyoshiblog-22&amp;amp;camp=247&amp;amp;creative=1211&quot; target=_blank&gt;HUNTER×HUNTER NO.25 (25) (ジャンプコミックス)&lt;/A&gt;&lt;/H4&gt;&lt;IMG style=&quot;BORDER-RIGHT: medium none; BORDER-TOP: medium none; MARGIN: 0px; BORDER-LEFT: medium none; BORDER-BOTTOM: medium none&quot; height=1 alt=&quot;&quot; src=&quot;http://www.assoc-amazon.jp/e/ir?t=ajiyoshiblog-22&amp;amp;l=as2&amp;amp;o=9&amp;amp;a=4088745353&quot; width=1 border=0&gt;&lt;A href=&quot;http://www.amazon.co.jp/exec/obidos/redirect?link_code=as2&amp;amp;path=ASIN/4088745353&amp;amp;tag=ajiyoshiblog-22&amp;amp;camp=247&amp;amp;creative=1211&quot; target=_blank&gt;&lt;IMG alt=&quot;HUNTER×HUNTER NO.25 (25) (ジャンプコミックス)&quot; src=&quot;http://images-jp.amazon.com/images/P/4088745353.09.MZZZZZZZ.jpg&quot;&gt;&lt;/A&gt;&lt;BR&gt;価格 ： ￥410 （税込）&lt;BR&gt;メーカー ： 集英社&lt;BR&gt;&lt;A href=&quot;http://www.amazon.co.jp/exec/obidos/redirect?link_code=as2&amp;amp;path=ASIN/4088745353&amp;amp;tag=ajiyoshiblog-22&amp;amp;camp=247&amp;amp;creative=1211&quot; target=_blank&gt;→Amazonで詳細を見る&lt;/A&gt;&lt;BR&gt;&lt;A href=&quot;http://list.ecnavi.jp/item/asin/4088745353&quot; target=_blank&gt;→ECナビリストで詳細を見る&lt;/A&gt;&lt;BR&gt;おすすめ度 ： &lt;IMG src=&quot;http://cdn.list.ecnavi.jp/static/image/rate/o_5.gif&quot;&gt;&lt;BR&gt;&lt;h5&gt;レビュー&lt;/h5&gt;&lt;p&gt;&lt;a href=&quot;http://list.ecnavi.jp&quot;&gt;powered by ECナビ リスト&lt;/a&gt;&lt;/p&gt;</description> 
			<link>http://blog.ajiyoshi.org/Entry/280/</link> 
		</item>
		<item>
			<title>業務連絡 次回SICP読書会は2/25(月)です</title>
			<description>makogaにリマインドしようとおもったら携帯忘れてたのでブログで連絡します。&lt;br /&gt;
あとs木さんの連絡先を一切知らないのでご連絡をお願いします。&lt;br /&gt;
&lt;br /&gt;
次回は1.2.2木構造再帰(p20)からです。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;a href=&quot;http://d.hatena.ne.jp/makoga/20080217/WeeklyReportRead&quot;&gt;TB用リンク。ないと失敗するかな？&lt;/a&gt;</description> 
			<link>http://blog.ajiyoshi.org/Entry/279/</link> 
		</item>
		<item>
			<title>ECナビリスト</title>
			<description>&lt;p&gt;ECナビリストていう昔作ったサービスがあって、全然ふるわないんですが、これをなんとかしようぜとかいうブレスト的なミーティングに出たけど、改めて使うとECナビリストめっちゃ素晴らしくてびびる。書いた人すげーよ。僕とunkだけど。&lt;/p&gt;&lt;br /&gt;
&lt;p&gt;↓こんなん簡単につくれるんだぜ？全部僕のアフィリエイトリンク付きで。&lt;/p&gt;&lt;br /&gt;
&lt;p&gt;動かないなーとおもったら改行を&amp;lt;br&amp;gt;に変えるオプションがついてて腐ってただけだった。&lt;/p&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;script type=&quot;text/javascript&quot; charset=&quot;UTF-8&quot;&gt;&lt;br /&gt;
ecnavi_blog_parts_userid = &quot;y-sudo&quot;;&lt;br /&gt;
var ecnavi_blog_parts_listpath = &quot;yukimura&quot;;&lt;br /&gt;
var ecnavi_blog_parts_width = 150;&lt;br /&gt;
var ecnavi_blog_parts_height = 300;&lt;br /&gt;
var ecnavi_blog_parts_bgcolor = &quot;FFFFFF&quot;;&lt;br /&gt;
var ecnavi_blog_parts_bordercolor = &quot;666666&quot;;&lt;br /&gt;
var ecnavi_blog_parts_borderwidth = 1;&lt;br /&gt;
var ecnavi_blog_parts_textcolor = &quot;000000&quot;;&lt;br /&gt;
var ecnavi_blog_parts_linkcolor = &quot;3C8ABB&quot;;&lt;br /&gt;
var ecnavi_blog_parts_imagesize = 100;&lt;br /&gt;
&lt;/script&gt;&lt;br /&gt;
&lt;script type=&quot;text/javascript&quot; charset=&quot;UTF-8&quot; src=&quot;http://list.ecnavi.jp/static/js/blogparts/ecnavi_blogparts.js&quot;&gt;&lt;/script&gt;</description> 
			<link>http://blog.ajiyoshi.org/Entry/278/</link> 
		</item>
		<item>
			<title>対数</title>
			<description>SICP読書会をしてて、「対数なんて習った記憶がないand/or知らない」的な人が6人中4人いて軽くカルチャーショックを受けた。なお6人全員現役のプログラマ。&lt;br /&gt;
Webアプリケーション書くのに対数なんて必要ないデスヨネ…&lt;br /&gt;
文系or商業科でそもそも習わない人が2人、習ったはずだけど記憶から削除された人が2人。&lt;br /&gt;
&lt;br /&gt;
習ってないのはしょうがないし、忘れてダメなわけじゃない(リファレンスカウントが0な時点で記憶からガベージコレクトされちゃうのはしょうがない)とは思うので、責めるではないのだけど単純に驚いた。</description> 
			<link>http://blog.ajiyoshi.org/Entry/277/</link> 
		</item>
		<item>
			<title>DQ4</title>
			<description>弊社のインフラチームのネ申いわゆるゴッドであるところのY村さんが&lt;br /&gt;
&lt;br /&gt;
「DQ4 DSが何時間遊べようが関係ない暇つぶし方法を思いついた&lt;br /&gt;
&lt;span style=&quot;font-size:x-large&quot;&gt;ロードランナーだ！！！&lt;/span&gt;&lt;br /&gt;
Wryyyyyyyy!!!!!!!!!」&lt;br /&gt;
&lt;br /&gt;
的なことをタバコ部屋で言っていた。</description> 
			<link>http://blog.ajiyoshi.org/Entry/276/</link> 
		</item>
		<item>
			<title>SICP練習問題1.1～1.3</title>
			<description>&lt;p&gt;SICPの読書会ちゃんとやってます。週一回。&lt;br /&gt;
&lt;p&gt;2回やって練習問題1.3まで来ました。淡々と答案を書こうと思います。schemeは全然分かってないので、識者の方は突っ込みお願いします。&lt;/p&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;p&gt;1.1 式を評価した結果を答えよ 省略&lt;/p&gt;&lt;br /&gt;
&lt;p&gt;1.2 式を前置記法で書け 省略&lt;/p&gt;&lt;br /&gt;
&lt;p&gt;1.3 3つの数を引数に取りその中の大きいもの二つの平方の和を返す手続きを定義せよ。&lt;/p&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;p&gt;ここまでに出てきているschemeの要素は以下。&lt;/p&gt;&lt;br /&gt;
&lt;ul&gt;&lt;br /&gt;
&lt;li&gt;変数/関数定義&lt;/li&gt;&lt;br /&gt;
&lt;li&gt;条件分岐&lt;/li&gt;&lt;br /&gt;
&lt;li&gt;論理和/論理積&lt;/li&gt;&lt;br /&gt;
&lt;/ul&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;p&gt;以上の要素だけを使って馬鹿正直に書くとこう。&lt;/p&gt;&lt;br /&gt;
&lt;p&gt;でもこんな if/else だらけのコードを書くためにSICP読んでるわけじゃないのであとでもうちょっと何とかしてみる。&lt;/p&gt;&lt;br /&gt;
&lt;code&gt;&lt;pre&gt;&lt;br /&gt;
(define (square x) (* x x))&lt;br /&gt;
(define (ex1-3-1 x y z)&lt;br /&gt;
  (cond ((and (&lt; x y) (&lt; x z)) (+ (square y) (square z)))&lt;br /&gt;
        ((and (&lt; y x) (&lt; y z)) (+ (square z) (square x)))&lt;br /&gt;
        (else (+ (square x) (square y)))))&lt;br /&gt;
&lt;/pre&gt;&lt;/code&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;p&gt;単体テストは&lt;a href=&quot;http://d.hatena.ne.jp/tomapd/20060515/1147711444&quot;&gt;define-syntax でユニットテスト&lt;/a&gt;の素敵なマクロを使ってみる。&lt;/p&gt;&lt;br /&gt;
&lt;p&gt;このあと別なバージョンの実装もテストするので、テストケースに関数を渡せるように改変。&lt;/p&gt;&lt;br /&gt;
&lt;code&gt;&lt;pre&gt;&lt;br /&gt;
(define (report-result result form)&lt;br /&gt;
  (format #t &quot;[~A] ... ~A~%&quot; (if result &quot;pass&quot; &quot;FAIL&quot;) form))&lt;br /&gt;
(define-syntax check&lt;br /&gt;
  (syntax-rules ()&lt;br /&gt;
                ((_ form ...) (begin (report-result form 'form) ...))))&lt;br /&gt;
&lt;br /&gt;
(define (testcase1-3 ex1-3)&lt;br /&gt;
  (check&lt;br /&gt;
    (= (ex1-3 1 2 3) 13)&lt;br /&gt;
    (= (ex1-3 3 1 2) 13)&lt;br /&gt;
    (= (ex1-3 3 2 1) 13)&lt;br /&gt;
    (= (ex1-3 1 2 2) 8)&lt;br /&gt;
    (= (ex1-3 2 1 2) 8)&lt;br /&gt;
    (= (ex1-3 2 2 1) 8)&lt;br /&gt;
    (= (ex1-3 1 1 1) 2)))&lt;br /&gt;
&lt;br /&gt;
(testcase1-3 ex1-3-1)&lt;br /&gt;
&lt;/pre&gt;&lt;/code&gt;&lt;br /&gt;
&lt;blockquote&gt;&lt;pre&gt;&lt;br /&gt;
[pass] ... (= (ex1-3 1 2 3) 13)&lt;br /&gt;
[pass] ... (= (ex1-3 3 1 2) 13)&lt;br /&gt;
[pass] ... (= (ex1-3 3 2 1) 13)&lt;br /&gt;
[pass] ... (= (ex1-3 1 2 2) 8)&lt;br /&gt;
[pass] ... (= (ex1-3 2 1 2) 8)&lt;br /&gt;
[pass] ... (= (ex1-3 2 2 1) 8)&lt;br /&gt;
[pass] ... (= (ex1-3 1 1 1) 2)&lt;br /&gt;
&lt;/pre&gt;&lt;/blockquote&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;p&gt;考え方その2&lt;/p&gt;&lt;br /&gt;
&lt;p&gt;全部足してから一番小さいのだけ引く&lt;/p&gt;&lt;br /&gt;
&lt;p&gt;2つの数のうち小さい方を返すmin-pair関数を定義してやる。3つの引数をとって最小を返すほうmin-trioとかのほうが綺麗に書けるけどどうみても汎用性がなさすぎる。任意個の引数から最小を返すmy-min関数を実装してもいいけど、ここまでの範囲では書けない。&lt;/p&gt;&lt;br /&gt;
&lt;p&gt;ただこのやり方は富豪的過ぎるかもしれない。3数ごときならどうでもいいけど。&lt;/p&gt;&lt;br /&gt;
&lt;code&gt;&lt;pre&gt;&lt;br /&gt;
(define (ex1-3-2 x y z)&lt;br /&gt;
  (define (min-pair a b) (if (&lt; a b) a b))&lt;br /&gt;
  (+ (square x) (square y) (square z) (- (square (min-pair x (min-pair y z))))))&lt;br /&gt;
(testcase1-3 ex1-3-2)&lt;br /&gt;
&lt;/pre&gt;&lt;/code&gt;&lt;br /&gt;
(以下テスト結果は略)&lt;br /&gt;
&lt;br /&gt;
&lt;p&gt;さすがにmin関数くらいは組み込みを使ってもいいかもしれない。ここまでに出てきた要素から逸脱するけれど。&lt;/p&gt;&lt;br /&gt;
&lt;code&gt;&lt;pre&gt;&lt;br /&gt;
(define (ex1-3-3 x y z)&lt;br /&gt;
  (+ (square x) (square y) (square z) (- (square (min x y z)))))&lt;br /&gt;
(testcase1-3 ex1-3-3)&lt;br /&gt;
&lt;/pre&gt;&lt;/code&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;p&gt;考え方その3&lt;/p&gt;&lt;br /&gt;
&lt;p&gt;何度もsquareを書きたくない。関数型言語なんだからmapくらいあるだろ。minの時点でここまでの範囲を逸脱しちゃったのでここからはもう気にしない。&lt;/p&gt;&lt;br /&gt;
&lt;p&gt;perlでいうList::Util::reduce、Rubyでいうinjectみたいのは何だろうとしらべたらfoldらしいのでそれを使う。foldには初期値を設定できるので、初期値に (- (square (min x y z))) を渡したら割とすっきり。&lt;/p&gt;&lt;br /&gt;
&lt;code&gt;&lt;pre&gt;&lt;br /&gt;
(define (ex1-3-4 x y z)&lt;br /&gt;
  (fold + (- (square (min x y z))) (map square (list x y z))))&lt;br /&gt;
(testcase1-3 ex1-3-4)&lt;br /&gt;
&lt;/pre&gt;&lt;/code&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;p&gt;考え方その4&lt;/p&gt;&lt;br /&gt;
&lt;p&gt;考え方その3はあまりにもこの問題の前提条件に依存しすぎている。4引数で上位2つという問題に拡張されたらどうするのか？もうすでに無駄な拡張性確保の領域。設計上やってはいけないことの一つですね。&lt;/p&gt;&lt;br /&gt;
&lt;p&gt;解き方として、引数をソートしてから上位n個を取り出して2乗して足すという問題の特殊な場合と見る。&lt;/p&gt;&lt;br /&gt;
&lt;p&gt;sliceとかheadとかそういう関数はなさそうだったのでまずはリストの先頭n個を取り出す関数headを作る（こういう目的の関数ありそうだけど）。&lt;/p&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;code&gt;&lt;pre&gt;&lt;br /&gt;
(define (head num ls)&lt;br /&gt;
  (define (&lt;= a b) (not (&gt; a b)))&lt;br /&gt;
  (if (&lt;= num 0) '() (cons (car ls) (head (- num 1) (cdr ls)))))&lt;br /&gt;
(head 3 '(1 2 3 4 5 6))&lt;br /&gt;
&lt;/pre&gt;&lt;/code&gt;&lt;br /&gt;
&lt;p&gt;なんか非効率な実装のような気もする。&lt;/p&gt;&lt;br /&gt;
&lt;p&gt;次に2乗の和を求める関数sum-of-square（必要ない気もするけど式が長くなっていやだったので切り分けた）&lt;/p&gt;&lt;br /&gt;
&lt;code&gt;&lt;pre&gt;&lt;br /&gt;
(define (sum-of-square ls)&lt;br /&gt;
  (fold + 0 (map square ls)))&lt;br /&gt;
&lt;/pre&gt;&lt;/code&gt;&lt;br /&gt;
&lt;p&gt;最後にリストの上位n個リストを返す関数bigger（同上）。&lt;/p&gt;&lt;br /&gt;
&lt;code&gt;&lt;pre&gt;&lt;br /&gt;
(define (bigger num ls)&lt;br /&gt;
  (head num (reverse (sort ls))))&lt;br /&gt;
&lt;/pre&gt;&lt;/code&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;p&gt;以上を使えばこうなる。当初の問題から逸脱しすぎている。&lt;/p&gt;&lt;br /&gt;
&lt;code&gt;&lt;pre&gt;&lt;br /&gt;
(define (ex1-3-5 x y z)&lt;br /&gt;
  (sum-of-square (bigger 2 (list x y z))))&lt;br /&gt;
&lt;/pre&gt;&lt;/code&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;p&gt;補助関数の定義はex1-3-5の内部にしちゃって実際にはこう。&lt;/p&gt;&lt;br /&gt;
&lt;code&gt;&lt;pre&gt;&lt;br /&gt;
(define (ex1-3-5 x y z)&lt;br /&gt;
  (define (head num ls)&lt;br /&gt;
    (define (&lt;= a b) (not (&gt; a b)))&lt;br /&gt;
    (if (&lt;= num 0) '() (cons (car ls) (head (- num 1) (cdr ls)))))&lt;br /&gt;
  (define (sum-of-square ls)&lt;br /&gt;
    (fold + 0 (map square ls)))&lt;br /&gt;
  (define (bigger num ls)&lt;br /&gt;
    (head num (reverse (sort ls))))&lt;br /&gt;
  (sum-of-square (bigger 2 (list x y z))))&lt;br /&gt;
&lt;/pre&gt;&lt;/code&gt;&lt;br /&gt;
</description> 
			<link>http://blog.ajiyoshi.org/Entry/275/</link> 
		</item>
		<item>
			<title>今年の目標その2：SICPを読了する</title>
			<description>以前買ったSICPだけど、4、5章でつまづいていた。&lt;br /&gt;
ざーっと読んだけど、4,5章は演習問題をがっちりやらないと絶対理解できないと思って、そのうちやろうで放置してしまっていた。&lt;br /&gt;
なんとかするために社内で何人かに声をかけて社内でSICP読書会をすることにした。&lt;br /&gt;
&lt;br /&gt;
第一回は1/16(水)&lt;br /&gt;
&lt;br /&gt;
&lt;H4&gt;&lt;A href=&quot;http://www.amazon.co.jp/exec/obidos/redirect?link_code=as2&amp;amp;path=ASIN/489471163X&amp;amp;tag=ajiyoshiblog-22&amp;amp;camp=247&amp;amp;creative=1211&quot; target=_blank&gt;計算機プログラムの構造と解釈&lt;/A&gt;&lt;/H4&gt;&lt;IMG style=&quot;BORDER-RIGHT: medium none; BORDER-TOP: medium none; MARGIN: 0px; BORDER-LEFT: medium none; BORDER-BOTTOM: medium none&quot; height=1 alt=&quot;&quot; src=&quot;http://www.assoc-amazon.jp/e/ir?t=ajiyoshiblog-22&amp;amp;l=as2&amp;amp;o=9&amp;amp;a=489471163X&quot; width=1 border=0&gt;&lt;A href=&quot;http://www.amazon.co.jp/exec/obidos/redirect?link_code=as2&amp;amp;path=ASIN/489471163X&amp;amp;tag=ajiyoshiblog-22&amp;amp;camp=247&amp;amp;creative=1211&quot; target=_blank&gt;&lt;IMG alt=計算機プログラムの構造と解釈 src=&quot;http://images-jp.amazon.com/images/P/489471163X.09.MZZZZZZZ.jpg&quot;&gt;&lt;/A&gt;&lt;BR&gt;価格 ： ￥4830 （税込）&lt;BR&gt;メーカー ： ピアソンエデュケーション&lt;BR&gt;&lt;A href=&quot;http://www.amazon.co.jp/exec/obidos/redirect?link_code=as2&amp;amp;path=ASIN/489471163X&amp;amp;tag=ajiyoshiblog-22&amp;amp;camp=247&amp;amp;creative=1211&quot; target=_blank&gt;→Amazonで詳細を見る&lt;/A&gt;&lt;BR&gt;おすすめ度 ： &lt;IMG src=&quot;http://cdn.list.ecnavi.jp/static/image/rate/o_0.gif&quot;&gt;&lt;BR&gt;&lt;br /&gt;
</description> 
			<link>http://blog.ajiyoshi.org/Entry/274/</link> 
		</item>
		<item>
			<title>今年の目標：引越しする</title>
			<description>何年も前から言い続けてるけどいい加減引越ししよう。&lt;br /&gt;
会社から徒歩10分くらいのところに。&lt;br /&gt;
このロケーションだと猫飼うのはあきらめることになるけど・・・</description> 
			<link>http://blog.ajiyoshi.org/Entry/273/</link> 
		</item>
		<item>
			<title>最近読んだマンガ</title>
			<description>正月は実家で諸星大二郎を読むのが習慣になっているので諸星大二郎を読みまくる。&lt;br /&gt;
僕の実家というのは、最寄の二車線の道路から1kmくらい離れており、にんじん畑と自衛隊の基地しかないような土地柄で、素足でフローリングの廊下を歩くとしもやけになりそうなロケーションであり、下手すると室内でも吐く息が白いような家で諸星大二郎を読むというのはそこはかとなく趣き深い。&lt;br /&gt;
&lt;br /&gt;
別にネタとかレビューがあるわけでもないけどとりあえず列挙。&lt;br /&gt;
&lt;br /&gt;
&lt;H4&gt;&lt;A href=&quot;http://www.amazon.co.jp/exec/obidos/redirect?link_code=as2&amp;amp;path=ASIN/4420250062&amp;amp;tag=ajiyoshiblog-22&amp;amp;camp=247&amp;amp;creative=1211&quot; target=_blank&gt;マッドメン (1)&lt;/A&gt;&lt;/H4&gt;&lt;IMG style=&quot;BORDER-RIGHT: medium none; BORDER-TOP: medium none; MARGIN: 0px; BORDER-LEFT: medium none; BORDER-BOTTOM: medium none&quot; height=1 alt=&quot;&quot; src=&quot;http://www.assoc-amazon.jp/e/ir?t=ajiyoshiblog-22&amp;amp;l=as2&amp;amp;o=9&amp;amp;a=4420250062&quot; width=1 border=0&gt;&lt;A href=&quot;http://www.amazon.co.jp/exec/obidos/redirect?link_code=as2&amp;amp;path=ASIN/4420250062&amp;amp;tag=ajiyoshiblog-22&amp;amp;camp=247&amp;amp;creative=1211&quot; target=_blank&gt;&lt;IMG alt=&quot;マッドメン (1)&quot; src=&quot;http://images-jp.amazon.com/images/P/4420250062.09.MZZZZZZZ.jpg&quot;&gt;&lt;/A&gt;&lt;BR&gt;価格 ： ￥630 （税込）&lt;BR&gt;メーカー ： 創美社&lt;BR&gt;おすすめ度 ： &lt;IMG src=&quot;http://cdn.list.ecnavi.jp/static/image/rate/o_5.gif&quot;&gt;&lt;BR&gt;&lt;br /&gt;
&lt;H4&gt;&lt;A href=&quot;http://www.amazon.co.jp/exec/obidos/redirect?link_code=as2&amp;amp;path=ASIN/4420250070&amp;amp;tag=ajiyoshiblog-22&amp;amp;camp=247&amp;amp;creative=1211&quot; target=_blank&gt;マッドメン (2) (創美社コミック文庫 (M-1-2))&lt;/A&gt;&lt;/H4&gt;&lt;IMG style=&quot;BORDER-RIGHT: medium none; BORDER-TOP: medium none; MARGIN: 0px; BORDER-LEFT: medium none; BORDER-BOTTOM: medium none&quot; height=1 alt=&quot;&quot; src=&quot;http://www.assoc-amazon.jp/e/ir?t=ajiyoshiblog-22&amp;amp;l=as2&amp;amp;o=9&amp;amp;a=4420250070&quot; width=1 border=0&gt;&lt;A href=&quot;http://www.amazon.co.jp/exec/obidos/redirect?link_code=as2&amp;amp;path=ASIN/4420250070&amp;amp;tag=ajiyoshiblog-22&amp;amp;camp=247&amp;amp;creative=1211&quot; target=_blank&gt;&lt;IMG alt=&quot;マッドメン (2) (創美社コミック文庫 (M-1-2))&quot; src=&quot;http://images-jp.amazon.com/images/P/4420250070.09.MZZZZZZZ.jpg&quot;&gt;&lt;/A&gt;&lt;BR&gt;価格 ： ￥630 （税込）&lt;BR&gt;メーカー ： 創美社&lt;BR&gt;おすすめ度 ： &lt;IMG src=&quot;http://cdn.list.ecnavi.jp/static/image/rate/o_5.gif&quot;&gt;&lt;BR&gt;&lt;br /&gt;
&lt;H4&gt;&lt;A href=&quot;http://www.amazon.co.jp/exec/obidos/redirect?link_code=as2&amp;amp;path=ASIN/4022670851&amp;amp;tag=ajiyoshiblog-22&amp;amp;camp=247&amp;amp;creative=1211&quot; target=_blank&gt;栞と紙魚子 1 新版 (1) (ソノラマコミック文庫 も 16-1)&lt;/A&gt;&lt;/H4&gt;&lt;IMG style=&quot;BORDER-RIGHT: medium none; BORDER-TOP: medium none; MARGIN: 0px; BORDER-LEFT: medium none; BORDER-BOTTOM: medium none&quot; height=1 alt=&quot;&quot; src=&quot;http://www.assoc-amazon.jp/e/ir?t=ajiyoshiblog-22&amp;amp;l=as2&amp;amp;o=9&amp;amp;a=4022670851&quot; width=1 border=0&gt;&lt;A href=&quot;http://www.amazon.co.jp/exec/obidos/redirect?link_code=as2&amp;amp;path=ASIN/4022670851&amp;amp;tag=ajiyoshiblog-22&amp;amp;camp=247&amp;amp;creative=1211&quot; target=_blank&gt;&lt;IMG alt=&quot;栞と紙魚子 1 新版 (1) (ソノラマコミック文庫 も 16-1)&quot; src=&quot;http://images-jp.amazon.com/images/P/4022670851.09.MZZZZZZZ.jpg&quot;&gt;&lt;/A&gt;&lt;BR&gt;価格 ： ￥600 （税込）&lt;BR&gt;メーカー ： 朝日新聞社出版局&lt;BR&gt;おすすめ度 ： &lt;IMG src=&quot;http://cdn.list.ecnavi.jp/static/image/rate/o_4.gif&quot;&gt;&lt;BR&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;H4&gt;&lt;A href=&quot;http://www.amazon.co.jp/exec/obidos/redirect?link_code=as2&amp;amp;path=ASIN/402267086X&amp;amp;tag=ajiyoshiblog-22&amp;amp;camp=247&amp;amp;creative=1211&quot; target=_blank&gt;栞と紙魚子 2 新版 (2) (ソノラマコミック文庫 も 16-2)&lt;/A&gt;&lt;/H4&gt;&lt;IMG style=&quot;BORDER-RIGHT: medium none; BORDER-TOP: medium none; MARGIN: 0px; BORDER-LEFT: medium none; BORDER-BOTTOM: medium none&quot; height=1 alt=&quot;&quot; src=&quot;http://www.assoc-amazon.jp/e/ir?t=ajiyoshiblog-22&amp;amp;l=as2&amp;amp;o=9&amp;amp;a=402267086X&quot; width=1 border=0&gt;&lt;A href=&quot;http://www.amazon.co.jp/exec/obidos/redirect?link_code=as2&amp;amp;path=ASIN/402267086X&amp;amp;tag=ajiyoshiblog-22&amp;amp;camp=247&amp;amp;creative=1211&quot; target=_blank&gt;&lt;IMG alt=&quot;栞と紙魚子 2 新版 (2) (ソノラマコミック文庫 も 16-2)&quot; src=&quot;http://images-jp.amazon.com/images/P/402267086X.09.MZZZZZZZ.jpg&quot;&gt;&lt;/A&gt;&lt;BR&gt;価格 ： ￥600 （税込）&lt;BR&gt;メーカー ： 朝日新聞社出版局&lt;BR&gt;おすすめ度 ： &lt;IMG src=&quot;http://cdn.list.ecnavi.jp/static/image/rate/o_4.gif&quot;&gt;&lt;BR&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;H4&gt;&lt;A href=&quot;http://www.amazon.co.jp/exec/obidos/redirect?link_code=as2&amp;amp;path=ASIN/4334901409&amp;amp;tag=ajiyoshiblog-22&amp;amp;camp=247&amp;amp;creative=1211&quot; target=_blank&gt;海神記 上 (1) (光文社コミック叢書“シグナル” 6)&lt;/A&gt;&lt;/H4&gt;&lt;IMG style=&quot;BORDER-RIGHT: medium none; BORDER-TOP: medium none; MARGIN: 0px; BORDER-LEFT: medium none; BORDER-BOTTOM: medium none&quot; height=1 alt=&quot;&quot; src=&quot;http://www.assoc-amazon.jp/e/ir?t=ajiyoshiblog-22&amp;amp;l=as2&amp;amp;o=9&amp;amp;a=4334901409&quot; width=1 border=0&gt;&lt;A href=&quot;http://www.amazon.co.jp/exec/obidos/redirect?link_code=as2&amp;amp;path=ASIN/4334901409&amp;amp;tag=ajiyoshiblog-22&amp;amp;camp=247&amp;amp;creative=1211&quot; target=_blank&gt;&lt;IMG alt=&quot;海神記 上 (1) (光文社コミック叢書“シグナル” 6)&quot; src=&quot;http://images-jp.amazon.com/images/P/4334901409.09.MZZZZZZZ.jpg&quot;&gt;&lt;/A&gt;&lt;BR&gt;価格 ： ￥2000 （税込）&lt;BR&gt;メーカー ： 光文社&lt;BR&gt;おすすめ度 ： &lt;IMG src=&quot;http://cdn.list.ecnavi.jp/static/image/rate/o_5.gif&quot;&gt;&lt;BR&gt;&lt;br /&gt;
&lt;H4&gt;&lt;A href=&quot;http://www.amazon.co.jp/exec/obidos/redirect?link_code=as2&amp;amp;path=ASIN/4334901417&amp;amp;tag=ajiyoshiblog-22&amp;amp;camp=247&amp;amp;creative=1211&quot; target=_blank&gt;海神記[下] (光文社コミック叢書〈SIGNAL〉 (0007))&lt;/A&gt;&lt;/H4&gt;&lt;IMG style=&quot;BORDER-RIGHT: medium none; BORDER-TOP: medium none; MARGIN: 0px; BORDER-LEFT: medium none; BORDER-BOTTOM: medium none&quot; height=1 alt=&quot;&quot; src=&quot;http://www.assoc-amazon.jp/e/ir?t=ajiyoshiblog-22&amp;amp;l=as2&amp;amp;o=9&amp;amp;a=4334901417&quot; width=1 border=0&gt;&lt;A href=&quot;http://www.amazon.co.jp/exec/obidos/redirect?link_code=as2&amp;amp;path=ASIN/4334901417&amp;amp;tag=ajiyoshiblog-22&amp;amp;camp=247&amp;amp;creative=1211&quot; target=_blank&gt;&lt;IMG alt=&quot;海神記[下] (光文社コミック叢書〈SIGNAL〉 (0007))&quot; src=&quot;http://images-jp.amazon.com/images/P/4334901417.09.MZZZZZZZ.jpg&quot;&gt;&lt;/A&gt;&lt;BR&gt;価格 ： ￥2000 （税込）&lt;BR&gt;メーカー ： 光文社&lt;BR&gt;おすすめ度 ： &lt;IMG src=&quot;http://cdn.list.ecnavi.jp/static/image/rate/o_5.gif&quot;&gt;&lt;BR&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
あと会社帰りに適当に買った漫画&lt;br /&gt;
&lt;br /&gt;
&lt;H4&gt;&lt;A href=&quot;http://www.amazon.co.jp/exec/obidos/redirect?link_code=as2&amp;amp;path=ASIN/406314478X&amp;amp;tag=ajiyoshiblog-22&amp;amp;camp=247&amp;amp;creative=1211&quot; target=_blank&gt;巨娘 1 (1) (アフタヌーンKC)&lt;/A&gt;&lt;/H4&gt;&lt;IMG style=&quot;BORDER-RIGHT: medium none; BORDER-TOP: medium none; MARGIN: 0px; BORDER-LEFT: medium none; BORDER-BOTTOM: medium none&quot; height=1 alt=&quot;&quot; src=&quot;http://www.assoc-amazon.jp/e/ir?t=ajiyoshiblog-22&amp;amp;l=as2&amp;amp;o=9&amp;amp;a=406314478X&quot; width=1 border=0&gt;&lt;A href=&quot;http://www.amazon.co.jp/exec/obidos/redirect?link_code=as2&amp;amp;path=ASIN/406314478X&amp;amp;tag=ajiyoshiblog-22&amp;amp;camp=247&amp;amp;creative=1211&quot; target=_blank&gt;&lt;IMG alt=&quot;巨娘 1 (1) (アフタヌーンKC)&quot; src=&quot;http://images-jp.amazon.com/images/P/406314478X.09.MZZZZZZZ.jpg&quot;&gt;&lt;/A&gt;&lt;BR&gt;価格 ： ￥540 （税込）&lt;BR&gt;メーカー ： 講談社&lt;BR&gt;おすすめ度 ： &lt;IMG src=&quot;http://cdn.list.ecnavi.jp/static/image/rate/o_5.gif&quot;&gt;&lt;BR&gt;&lt;br /&gt;
&lt;H4&gt;&lt;A href=&quot;http://www.amazon.co.jp/exec/obidos/redirect?link_code=as2&amp;amp;path=ASIN/408877356X&amp;amp;tag=ajiyoshiblog-22&amp;amp;camp=247&amp;amp;creative=1211&quot; target=_blank&gt;銃夢外伝 (ヤングジャンプコミックス)&lt;/A&gt;&lt;/H4&gt;&lt;IMG style=&quot;BORDER-RIGHT: medium none; BORDER-TOP: medium none; MARGIN: 0px; BORDER-LEFT: medium none; BORDER-BOTTOM: medium none&quot; height=1 alt=&quot;&quot; src=&quot;http://www.assoc-amazon.jp/e/ir?t=ajiyoshiblog-22&amp;amp;l=as2&amp;amp;o=9&amp;amp;a=408877356X&quot; width=1 border=0&gt;&lt;A href=&quot;http://www.amazon.co.jp/exec/obidos/redirect?link_code=as2&amp;amp;path=ASIN/408877356X&amp;amp;tag=ajiyoshiblog-22&amp;amp;camp=247&amp;amp;creative=1211&quot; target=_blank&gt;&lt;IMG alt=&quot;銃夢外伝 (ヤングジャンプコミックス)&quot; src=&quot;http://images-jp.amazon.com/images/P/408877356X.09.MZZZZZZZ.jpg&quot;&gt;&lt;/A&gt;&lt;BR&gt;価格 ： ￥780 （税込）&lt;BR&gt;メーカー ： 集英社&lt;BR&gt;おすすめ度 ： &lt;IMG src=&quot;http://cdn.list.ecnavi.jp/static/image/rate/o_4.gif&quot;&gt;&lt;BR&gt;&lt;br /&gt;
&lt;br /&gt;
</description> 
			<link>http://blog.ajiyoshi.org/Entry/272/</link> 
		</item>

	</channel>
</rss>