2002-05-07
λ. カリー化(?)
class Proc def currying(arity=nil) if self.arity == 0 || self.arity == 1 return self elsif self.arity > 0 arity = self.arity else arity ||= (-self.arity)-1 end proc = lambda{|base| lambda{|*a| args = base + a if args.size >= arity call(*args) else proc.call(args) end } } proc.call([]) end end if __FILE__ == $0 add = lambda{|a,b| a+b}.currying succ = add[1] p succ[100] #=> 101 p succ[3] #=> 4 end
【2008-02-10追記】 [ruby-dev:33676] Suggestion: Proc#curry で遠藤さんが Proc#curry として同様(?)のものを提案している。 そこで言及されている Ruby, Proc#curry - 冬通りに消え行く制服ガールは、夢物語にリアルを求めない。 - subtech のコードは随分と妙なコードではあるけれど。
λ. 続 Y Combinator
http://www.itlabs.umn.edu/HyperNews/get/gopalan/courses/CSCI8980-fall-2001/classwork/2.htmlを見ると、MLやHaskellでもY Combinatorを一応使えるのか。でもtrickyだ。
【追記】 トリッキーと書いたが、むしろ本質の表れた定義だろう。
2003-05-07
λ. shift/reset その2
call/ccによるshift/resetの表現の続き。 shift/resetまだ良く分からないや。とりあえず、お約束のGeneratorを書いてみる。とりあえず動いてるみたいだけど、これって正しい?
class Generator def initialize(enum, eof = nil) @eof = eof reset{ shift{|k| @cont = k } enum.each{|item| shift{|k| @cont = k; item } } @cont = nil @eof } end def read @cont ? @cont.call : @eof end end
ψ はら [正しいみたい。reset/shiftがこの用途に向いてないことの例証かも。(^^;]
2005-05-07
λ. ファンタジージョブ占い
石沢セソセイの白黒ウェブより。オアイーブってなんだか懐かしい名前だな。結果は「あなたはシーフです」だった。
あなたは盗みで培った素早さをいかし、戦いに役立つシーフ。良識派に目覚めた盗賊で、仲間を助けるためにその力を振るいます。そしてあなたの力は戦いだけではなく、仲間の心を潤す重要な役割を果たすでしょう。しかし非常に気まぐれな性格で、仲間を振り回すこともります。
わはは。
λ. ギャング・オブ・ニューヨーク
野蛮で奔放で残虐で、もー、わくわくするね。
2007-05-07
λ. 大分一日目
羽田に「日韓交流の新時代へ」という看板があった。これは去年の講演「韓国から見た日韓・日朝関係」で言及されていた羽田・金浦のシャトル便の話か。 あと、羽田では「もし某カードがもう出来てればなぁ」と思った。
大分の寮は思っていたよりも良い感じ。 ただ、部屋が5階なので昇り降りが大変。
λ. Kindergarten Quantum Mechanics, by Bob Coecke
幼稚園児のための量子力学とその周辺 より。 こないだの圏論勉強会で面白そうだと思ったので、飛行機の中で読んだ。
bra と ket 、どっちがどっちだか分からなくなるのは私だけ?
ψ 原 [Proc 生成してすぐさま call するなんて、脳が scheme に冒されて いるとしか思えません。:-) 大..]
ψ さかい [なるほど。そう書けばよかったのか。 schemeでコードを書いたことはほとんどないのだけど、 知らないうちに脳を冒..]