«前の日記(2008年03月04日) 最新 次の日記(2008年03月06日)» 編集

ema log


2008年03月05日 P2! 7 巻 買いました [長年日記]

_ [最近]ニコニコ動画SP1

メンテの影響で,プラグインでエラーが発生してうちの日記が503返してたようです.エラー処理を追加しないとなぁ.そうだ,CodeRepos のアカウント申請しよう.H.264と800kbpsと各種プレミアム特典はなかなかに魅力的.2-pass しなくても画質が出たらいいなぁ.期待しすぎ?

H.264に関してはVP6と同程度という評価も見ますがどうなんだろう.少なくともデコードは重たくなる様子.

References
【SP1】H.264、800kbps、容量アップ -SMILEVIDEOの新機能- [ニコニコニュース]
【SP1】お使いのブログでもニコニコ動画が楽しめるようになります: [ニコニコニュース]

_ [最近]P2! 7 巻

P2! 7 巻買いました.3年後はともかく,やっぱり,ヒロム-高槻戦を読めなかったのが残念で仕方がありません.遊部-張偉戦が最近のジャンプでは数少ない秀逸な話しだっただけに残念.誌名とは違って,ホップ・ステップで終わります.商業ってそういうものでしょうけど,斜陽なんでしょうね.

メモ:大阪式について書く.

_ [Programming]カリー化について

Haskell Brooks Curry という数学者の名前にちなんだ概念.以下,部分適応(Partial application)とカリー化(currying) の関係.

nanto_vi さんがおっしゃってたのは確か「関数の引数の一部を固定することが部分適応で,部分適応できるように関数を変形することがカリー化」だったと思うのですが,細部は違うかも.これが一番わかりやすい表現だと思う.

部分適応というのを,実際にどう使うかというと,例えば

fprintf( stderr, "hogehoge" );

みたいなエラー出力はよく使うと思うのですが,この fprintf( stderr, をくくりだした関数をエラー出力のヘルパとして作りますよね?

function error( char* message ) {
  fprintf( stderr, message );
}

こういうことを楽に実現するのが部分適応です.JavaScript で Prototype.JS を用いていることを想定して擬似コードを書くと

var error = fprintf.bind( stderr );
error( "hogehoge" );

みたいになります.fprintf の第一引数を stderr に固定(部分適応)した error という新しい関数を作り出したわけです.こういう仕組みは結構便利です.僕はイベントハンドラで使った経験があります(hoge.bind(this) だけじゃなくて,その次の引数も固定したり).

カリー化というのはこのような部分適応を行うための Factory Method / Generator を作ることのようです.「カリー化 = 部分適応」という説明もあるようですが,そちらは間違いだというのが正しそう.

function curryee( x, y, z ) { hoge; }

を元にして,

function curryed( x ) { return function( y ) { return function( z ) { hoge; }; }; }

「上のような関数を作ること」がカリー化だということのようです.正直,部分適応があれば十分だとは思うので,深くは追求していません.

Ruby をご存じの方ならRuby 1.9 のSymbol#to_procと(入ったばかりの)Procのカリー化の最後にあげられている

全然難しいことはなくて、

proc {|x, y, z| x + y + z }.curry

は、次のようなprocを返すのと同じです

proc {|x| proc {|y| proc {|z| x + y + z } } }

[Ruby 1.9 のSymbol#to_procと(入ったばかりの)Procのカリー化より引用]

が一番わかりやすいかもしれません.

じゃあ,そんな関数はどうやって作るのよ?という話はJavaScript でカリー化、再び: Days on the Moon弾もcurryを煮込んでみたを参照のこと.弾さんの方法だとFunctionコンストラクタを使っているので,curry化された関数はたしか,グローバルな名前空間におかれた関数になります.レアケースですが,関数内で生成した関数をカリー化したりすると,変数を参照できない問題がおきそうな気がする.

なんとなくわかったつもり.