トップ «前の日記(2004-09-24) 最新 次の日記(2004-10-09)» 編集

Route 477



2004-10-07

[prog] カリー化

後期が始まってからすっかり更新が鈍っている。

何をしてるのかというと、実習でO'Caml(Objective Caml)したりしてます。型推論すげえ。他にも音声認識とか、並列計算とかいろいろあったのだが、ちょうど関数型言語に興味を持ってたところだったのでO'Camlを選択した。O'Camlでscheme(のサブセット)のインタプリタを作るという実習なのだが、まだ始まったばかりなので、関数を定義したり、カリー化したりしてます。

とは言ってもまだあんまり本質が分かってない感じなのだが、oxy君のページで

K = lambda{|x|
  lambda{|y|
    x
  }
}

みたいな(Rubyの)コードが書いてあって、ああなるほど、と思った。 「関数を返す関数」の連続で、関数が定義されている、と。

O'Camlでは例えば、

let concat x y z = x^y^z

と書くのは*1

let concat =
  (fun x ->
    (fun y ->
      (fun z -> x^y^z)))

と書くのと同じである。呼び出す方も、concat "a" "b" "c" と (((concat "a") "b") "c") が同じ意味となる。なんとなく、Lispのリスト (1 2 3 4) がRubyで [1,[2,[3, 4] ] となるのと似てる感じがした。なんか関係あったりするのだろうか。

*1 「^」は文字列結合の演算子

[zaurus] RHG

あ、あと秘密裡に(?)手に入れていたLinux Zaurusを使い始めました。 SL-B500です。通学の電車内で、RHGを読んでいます。 いま9章の途中なので、そろそろ半分か。

ちなみに中古で3万でした。いつの間に買ったのかって?7月です。 …7月? *1

*1 いろいろと忙しい月であると思われるのだが