PHPの匿名関数のメモ(多次元配列のソート)

10月 31st, 2008 admin

最近存在を知ってからよく使うのだけど、何度も忘れて検索するのでメモ
2次元配列とかでソートしたいときに便利

PHP:
  1. $langs = array(
  2.          array("name" => "php","age" => "13"),
  3.          array("name" => "ruby","age" => "15")
  4.        );

↑これのageでソートしたいって時が結構ある
まず普通はusortとユーザ定義関数でやる

PHP:
  1. function sortByAge($a,$b){
  2.   return $a["age"]> $b["age"];
  3. }
  4. usort($langs,"sortByAge");

これでOK。だけどなんだか関数の定義が面倒くさい。
んで、そんなときにusortとphpの匿名関数であるcreate_functionを使うとすっきりかける

PHP:
  1. usort($langs, create_function('$a,$b','return $a["age"]> $b["age"];'));

これだけで$langsがageでソートされるので便利。

まとめ

・PHPよりRubyが年上なのが少し驚いた
・匿名関数と無名関数。どちらの言い方が正しいのか知りたい。

「CPUの創りかた」半田付け終了

10月 27th, 2008 admin

10月26日にCSNagoyaの勉強会のCPUの創りかたを開催しました。
久しぶりに進展を報告ができます。なんと2月から延々とやってきた半田付けが終了したのです!

今回は面倒なので写真で報告してみようと思います
dsc00332.jpg
ワラビモチ愛好会さんからワラビモチの差し入れがありました。緑色のはえんどう豆の粉らしいです。うまかった。

dsc00333.jpg
これがCPUの全貌だ!右上の電源の線がちぎれたのでデバッグは次回に持ち越し

dsc00334.jpg
左の青い部分がメモリです。見てのとおり128bitで全部です。
スイッチの操作=プログラミングということになります。

dsc00335.jpg
この赤いLEDが出力のすべてです。一番派手な部分です。
ここを光らせるためだけに、この半年頑張ってきました。

dsc00339.jpg
勉強会後はJP CAFE &DINERというカフェで懇親会をしました。

まとめ

次回からはデバッグ&動作検証。ソフトウェアと違ってエラーメッセージがでないうえに、取り返しがつかない場合があるので恐ろしい・・・目指せ年内動作で頑張ります。

文字列探索(1)

10月 25th, 2008 admin

久しぶりに「アルゴリズムとデータ構造シリーズ」です。今回は第9章「浮動小数点数と数値計算」です。

文字列探索

このアルゴリズムについては説明は必要ないでしょうね。文字列の探索はコンピュータがビジネスに欠かせなくなってしまった今日では非常に重要になっています。
第2章のあたりでサーチについては学びましたが、効率の良いバイナリサーチは文字列探索の場合はつかえません。なぜならバイナリサーチはあらかじめサーチ対象をソートしておく必要があったからです。
では、どのような方法があるのでしょうか。この章は3つぐらいコードが必要で正直面倒ですが順番にやっていきたいと思います。

まず今回はもっとも単純ですが、単純がゆえにバグもおこりにくいということから最も使われているアルゴリズムからです。ようするに最初から順番に調べていくという方法です。
[ruby]
def simple_search(text,pattern)
text.length.times do |n|
print " text:" + text + "\npattern:"
print " " * n
print pattern

flag = true
pattern.length.times do |i|
flag = false if (pattern[i] != text[n + i]) Read the rest of this entry »

Gaucheでフィボナッチ数列

10月 24th, 2008 admin

Gaucheの習作
最近はHelloWorldをかいた後はフィボナッチ数列らしい

CODE:
  1. (define (fib n)
  2.   (cond
  3.      ([= n 0] 1)
  4.      ([= n 1] 1)
  5.      (else (+ (fib (- n 2)) (fib (- n 1))))))
  6.  
  7. (define (fibs n)
  8.   (cond
  9.      ([= n 0]  '(1))
  10.      ([= n 1]  '(1 1))
  11.      ([> n 1]  (append (fibs (- n 1)) (fib n)))
  12.      ))

(fibs 10)とかで1 1 2 3 5 8 13 21 34 55とかってなる

第1回SICP勉強会のお知らせ

10月 23rd, 2008 admin

10月19日にCSNagoyaの勉強会で第0回SICP読書会を開催しました。
いつかはと思いながら、なかなか踏み出せずにいた一歩を踏み出してしまった感じです。

SICPとは

計算機プログラムの構造と解釈という本です。(wikipedia)
MITの計算機科学の授業で使われているような本で、紫色の魔術師が描かれた表紙が特徴的なので「魔術師本」とか「紫本」とかって呼ばれて恐れられたり親しまれたりしています。

僕がSICPに興味をもったのは「ひげぽん」さんの読書ブログを読んだのがきっかけ。
ひげぽんさんが読みはじめた動機はそのまま自分にもあてはまるので引用させて頂きます。

「計算機プログラムの構造と解釈(SICP)」を読み終えて

* ときどき「関数型言語はすごいらしい」と聞こえてくる。でも何がすごいのか理解できない自分がいた。
→関数型言語のすごさの一端を垣間見た。苦手意識はなくなり好きになった。
* 自分が尊敬するプログラマの多くがSICPを読んでいたり関数型言語を理解している。そして勉強することをすすめられる。
→彼らと僕の力量の差は、SICPを読んでいるかどうかも一因だ。間違いない。
* 自分は大学などで情報系の学部ではなかったので、基礎が出来てないのではないかと常に不安だった。基礎がおろそかになっているせいで、いつか壁にぶつかるのではないか不安だった。
→やっぱりSICPは基礎だったよ。20代のうちに読んでよかった。これで壁はなくなった(かも)
* 初心者から見た関数型言語のイメージである再帰処理をスラスラと書けないことに気づいていた。
→再帰は普通に書けるようになった。
* 勉強してマスターしたときに今までの自分とまったく違う考え方になるかもしれないと期待している。
→半年前の俺とは別人だぜ(?)

いつになったら僕は「僕はプログラマーです」といえるんだろうと常々思っているのですが、これを
読んで少しでもプログラマーらしくなりたいなと思っています。

Gaucheについて

SICPの練習問題を解くのにGaucheを使っているのですが、Haskellの勉強を終えた僕とって(かけるようにはならなかったなぁ)Gaucheはとても新鮮ですばらしい言語に思えました。シンプルかつ柔軟なルールがとても気に入っています。

次回開催について

今回は第0回ということで人の募集はしませんでしたが(ぐだぐだになる可能性があったので)、次回からはどなたでも参加できるようになりますので、参加希望の方はGoogleGroupのCSNagoyaに入っていただいてメールにて参加表明をお願いします。次回の開催は10月24日のお昼~となっています。くわしくはこちら

(参加資格などはありませんが、多少のscheme、もしくは多少の関数型言語に関する知識が必要です。僕はプログラミングGaucheという本の6章ぐらいまでをやって前回参加しました。)